不同数据类型做比较的时候,都需要进行数据类型的转换!本文介绍常见数据类型转换的方法,相等和严格相等的判断规律

一、其他类型转换成布尔类型

1、使用场景:

对于括号里的表达式,会被强制转换为布尔类型

if ("") {console.log('empty')
}

2、转换规则

类型 结果
Undefined false
Null false
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true

3、举个栗子

if ("hello") {console.log("hello")
} //hello// 题目2:如下代码输出什么?
if ("") {console.log('empty')
} //undefined// 题目3:如下代码输出什么?
if (" ") {console.log('blank')
} //blank
// 题目4:如下代码输出什么?
if (+0.00) {console.log('blank')
} //undefined

4、小建议

写代码以后不要写成下面这样,不要再if内放变量。变量转换成布尔类型,会有很多状态。可以写成判断类型的语句如(a==="")。
if(a){
console.log('blank')
}

二、其他元素的转换成数字(toNumber)

1、使用场景:

判断是否相等==

2、转换规则

类型 结果
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123 , ""->0 , " "->0 空字符串和含有空白字符串的字符都为0
Object 先调用 .valueOf 方法获取结果。如果没定义,再尝试调用 .toString方法获取结果(数据运算符那篇文章有详细介绍)

三、== 的判断

经验就是把双方转换成数字

1、转换规则

类型 结果 结果
Undefined Null true 特例记住 undefined == null
Number any x == toNumber(y)数字和任何数据相比,把其他数据转换成数字在比较
Boolean (any) toNumber(x) == y 只要布尔类型先转换成数字,再比较
Object String or Number toPrimitive(x) == y 对象(这里指广义的对象,包括数组和函数)与原始类型的值比较时,对象转换成原始类型的值,再进行比较。
otherwise otherwise false

2、举个例子

"" == 0  // true           false
" " == 0  //true
"" == true  //false
" " == true  //false
!" " == true  // false  ,(!" "就是布尔类型的false)
"hello" == true  //false   "hello"转换成数字为nan,true转换成数字1
"0" == false  //true
"00" == false  //true
"0.00" == false  //true
undefined == null  //true
true== {}  //false  {}调用tostring为[object Object]
[] == true  //false  对象的toString方法默认返回[object Object]var obj = { a: 0, valueOf: function(){return 1}
}
obj == "[object Object]"  // false 自定义valueof之后,对象转换数字返回的是1

四、严格相等

1、不同类型的值

如果两个值的类型不同,直接返回false

2、复合类型值

两个复合类型(对象、数组、函数)数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址。如果两个变量引用同一个对象,则它们相等。

var v1 = {};
var v2 = v1;
v1 === v2 // true

反例

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false
//比较两个空对象、两个空数组、两个空函数,结果都是不相等。
//原因是对于复合类型的值,严格相等运算比较的是,它们是否引用同一个内存地址,
//而运算符两边的空对象、空数组、空函数的值,都存放在不同的内存地址,结果当然是false

3、特例

  • 例子1:NaN与任何值都不相等(包括自身)
NaN == NaN  // false
NaN === NaN  // false
  • 例子2:正0等于负0
+0 === -0 // true
  • 例子3:undefined和null与自身严格相等
undefined === undefined // true
null === null // true
var v1;
var v2;
v1 === v2 // true
//由于变量声明后默认值是undefined,因此两个只声明未赋值的变量是相等的。

数据类型转换、==和===的判断相关推荐

  1. 前端:JS/17/前篇总结(JS程序的基本语法,变量),数据类型-变量的类型(数值型,字符型,布尔型,未定义型,空型),数据类型转换,typeof()判断数据类型,从字符串提取整数或浮点数的函数

    JS程序的基本语法 1,JS是区分大小写的,如:Name和name是不同的: 2,JS中每一条语句,一般以英文的分号(;)结束,在Java中是严格地一定要加上分号,不然会报错:但在JavaScript ...

  2. 03 - JS数据类型转换/判断相等

    数据类型转换 其他类型转成数字类型:三种方式 1.parseInt();//转整数console.log(parseInt("10"));//10console.log(parse ...

  3. 06_2_Pytorch的基础数据类型、CPU tensor类型和GPU tensor类型、判断数据类型、CPU或GPU张量之间的转换、数据类型转换、1-4维向量、Tensor张量、Variable等

    1.6.2.Pytorch的基础数据类型 1.6.2.1.Torch定义了的七种CPU tensor类型和八种GPU tensor类型 1.6.2.2.基础数据类型 1.6.2.3.Pytorch数据 ...

  4. Java基础教程,第三讲,运算符 变量定义 数据类型转换

    2019独角兽企业重金招聘Python工程师标准>>> 学完此次课程,我能做什么? 学完此次课程我们可以学会Java的运算符,以及数据类型的自动转换和强制转换. 学习此次课程,需要多 ...

  5. python的六大数据类型中可以改变的数据类型为_Python中数据类型转换

    数据类型转换 将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为两类,分别是自动数据类型转换和 强制数据类型转换. 自动转换(隐式转换) 自动转换时程序根据运算要求进行的转换,不许 ...

  6. c++interesting转换为uint_1.6运算符及数据类型转换

    运算符 1. 算数运算符 算数运算符就像平时计算用的加减乘除,用于对参数进行各种计算.如: a = 20 b = 10 print(a+b) # 30 print(a-b) # 10 print(a* ...

  7. FPGA之道(25)VHDL数据类型转换函数与数据对象的属性

    文章目录 数据类型转换函数 数据对象的属性 数值类属性 Signal属性 数据类型转换函数 在VHDL的众多数据类型中,归根到底,它们都是要用二进制数来表示的,所以它们之间几乎都是可以相互转换的.在有 ...

  8. 8.0强行转换后变成了7_【自学C#】|| 笔记 12 数据类型转换

    一.数据类型转换 C# 是一门强类型语言,对类型要求比较严格,但是在一定的条件下也是可以相互转换的,如将 int 型数据转换成 double 型数据. C# 允许使用两种转换方式:隐式类型转换和显式类 ...

  9. python类型转换-Python中如何进行数据类型转换?

    原标题:Python中如何进行数据类型转换? 这一次要讲的是Python中的数据类型转换,Python中的数据类型转换是什么?就是将数据由当前类型变化为其他类型的操作就是数据类型转换.数据类型转换分为 ...

最新文章

  1. PHP获取IP地址以及IP地址所在位置
  2. UA MATH571A 检验异方差的非参数回归方法
  3. 【NLP实战系列】朴素贝叶斯文本分类实战
  4. OpenGL 平行粒子的实例
  5. ESP3 + ESP-IDF | 串口1 - 简单的串口回环测试
  6. 创新性应用深度学习,IBM在语音识别领域取得了里程碑式突破
  7. 贪小便宜的人交不得,否则,可能会因小失大
  8. Linux下PHP开发环境搭建(Apache2.4+PHP7.1+MySQL8.0)
  9. 2019 CCF 推荐 会议 列表
  10. pandas基础用法详解
  11. android+实现微信对话框样式,实现微信对话框的图片样式以及图片边框
  12. python对wav音频可视化
  13. Uncaught SyntaxError: The requested module ‘/node_modules/.vite/vue.js?v=bd1817bb‘ does not provide
  14. 数据库DQL单表查询
  15. python金融风控评分卡模型
  16. 如何搭建nginx服务器?
  17. 模拟两个神经元的连接,突触前神经元分别传递兴奋性和抑制性信号给突触后神经元(神经元模型使用HH方程)
  18. 代付系统/代付系统源码/支付宝代付系统/API代付系统
  19. 3D建模外包月入2W?3D游戏建模容易学吗?
  20. 学计算机的男生生好不好找女朋友,我是计算机的大2学生,我们班上女生极少,我很想找女朋友,请问怎么? 爱问知识人...

热门文章

  1. Java枚举意义在哪_java – 多个if-else或枚举 – 哪一个更好,为什么?
  2. oc引导win方法_[OC更新]机械革命10代标压稳定版更新
  3. python type创建类_Python基于内置函数type创建新类型
  4. CheckCode.js 前端验证码插件
  5. 【Harvest源码分析】获取F0轮廓
  6. Java并发学习一:CPU缓存导致的可见性问题带来的并发Bug
  7. Debian/Ubuntu/Centos下编译安装RocksDB
  8. Java 内存泄漏监控检测与分析
  9. perl 连接mysql_perl如何连接mysql数据库?
  10. aosp 本地版本管理_本地代码版本管理