js中的’==’和’===’
秋招笔试面试起来就又有点顾不上学习了,就简单总结一下最近面试遇到的一个点吧~
一、’ = = ’ 和 ’ = = = ‘的区别
-
对于基础数据类型来说
1)不同类型间比较,= =会将值转化成同一类型后的值”看“值”是否相等,= = =如果类型不同,其结果就是不等
2)同类型比较,直接进行“值”比较,两者结果一样 - 对于Array,Object等高级类型,= =和= = =是没有区别的。都是对“指针地址”的比较
二、一些案例和易错点
2.1 [] = = false 和 ![] = =false
- ![] 这是逻辑运算,[] == false 则是比较运算
[] 空数组对象为真,对真取反,那么得到的就是 假,所以 ![] 得到的是 false
![] //false
![] == false //true
![] === false //true
![] == true //false
-
[] = = false是比较运算,会先调用数组对象的toString()方法,然后拿toString()的返回值’’再进
行比较。而[].toString()的返回值是空字符串”。那么空字符串与false进行比较,得到的就是
真。也就是”== false的结果为true。
[] == false //true
[] === false //false
2.2 js中布尔值为false的六种情况
- undefined(未定义,找不到值时出现)
- null(代表空值)
- false(布尔值的false,字符串”false”布尔值为true)
- 0(数字0,字符串”0″布尔值为true)
- NaN(无法计算结果时出现,表示”非数值”;但是typeof NaN===“number”)
- “”(双引号)或’’(单引号) (空字符串,中间有空格时也是true)
Boolean(undefined) //false
Boolean(null) //false
Boolean(0) //false
Boolean(NaN) //false
Boolean('') //false
Boolean("") //false
但是
undefined == false //false
null == false //false
NaN == false //false
NaN == true //false
NaN == NaN //false
Number('a') == Number('a') //false
Number('') == Number('') //true
Number('') ==0 //true
- JS中的==对两边的对象进行比较时,undefined将被转换成数字,也就是说,undefined被看成基本值 。而又由于undefined转换成数字为NaN,所以将Number,String,Boolean这三种类型与undefined比较时,总是返回false
- 而对于null,JS则将其当成对象来比较,即尝试调用null的valueOf与toString方法,再将返回的结果与另一个值进行比较,可以推null==false返回false的原因是因为null的valueOf实现导致的 。由于null没有valueOf与toString方法,因此始终返回false
- NaN 是一种特殊的数值类型的值,它表示 not a number,即表示非数字值。而NaN == NaN为false ,这是因为NaN是一个非数字值,每个非数字值是不同的
- Number([value])把其他数据类型转换为number数字类型。当字符串转换为数字:空字符串是0 如果字符串中出现任意一个非有效数字时,输出都是NaN
2.3 js中布尔值和数字比较的情况
如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1
-1 == true //false
2 == true //false
1 == true //true
0 == false // true
2.4 两边类型不一样时的比较
'' == '0' // false 因为同类型,string类型
0 == '' // true
因为JavaScript是一种弱类型的语言,而在判断’’= =0时,因为两边的类型不一致,所以在进行判断时,会将两边转换成boolean类型后,再进行判断。因为空字符转换成boolean类型就是false,而0转换成boolean类型也是false。所以就会出现false==false等于true的结果。
版权声明:本文为qq_43178432原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。