相等
==和 === 的区别在于, == 检查的是允许类型转换情况下的值的相等性,而 === 检查不允许类型转换 情况下的值的相等性;因此, === 经常被称为“严格相等”。
不等 != 与 == 对应, !== 与 === 对应。
[ ] == ![ ]
等价于
这里记住不同类型的相等比较,顺序是
首先尝试使用valueOf()
再尝试使用toString()
最后尝试toNumber()
整理就是
隐式调用Boolean转型函数,对空数组转换成Boolean值,再对结果取反。此时比较[] == false
隐式调用Number转型函数,将false转换为数值0,此时比较[] == 0
调用valueOf方法和toString方法,此时[].toString() 为空字符串,比较 '' == 0
隐式调用Number转型函数,将空字符串转换为0,比较 0 == 0
最后返回true
所以 [ ] == false 为true
{} == !{} / {} == false
分析与[]的前两步都相同,但是{}.toString()会转换为'[object Object]',因此第4步会比较'[object Object]' == 0,这必然为 false
[ ] == [ ] / [ ] == { }
值为 false
这里因为两边对比都是对象时,比较的是两个引用值在内存中是否是同一个对象
(a ==1 && a== 2 && a==3) 可能为 true 吗
这里也在考察隐式变换,== 能把隐式转换 == 两边的类型相等
方法1
方法2
方法3
最后更新于
这有帮助吗?