TOC
想到这个的主要原因是最近看到了一个非常有趣的题目
[] == ![]
大家有想到结果是什么吗?其实结果是 true,下面是具体的判断链
[] == ![] -> [] == false -> [] == 0 -> [].valueOf() == 0 -> [].toString() == 0 -> “ == 0 -> 0 == 0 -> true
我在这里也重新看了一下<JavaScript 高级程序设计>
中对于相等操作符的解释,在这里做一下摘录
转换规则如下
如果有一个操作数是布尔值,先把布尔转换为数字 也就是 false>0 true>1 继续比较 如果一个是字符串 一个是数字 把字符串转换为数字后 继续比较 如果一个是对象 一个不是 先调用对象的 valueOf 方法 继续比较
还有如下的判断规则
null 和 undefined 相等 在比较之前 null 和 undefined 不能转换为其他任何值 如果有一个 NaN 相等操作符返回 false 可以认为 NaN 几乎不等于任何值 如果两个都是对象 判断两个对象是否指向同一个对象
全等操作符 === 其实就是在相等的基础上,增加了类型转换的限制
如果两个对比数未经过任何类型转换,就相等,那就返回 true,其他均为 false