js 双等于的隐形转换

343 阅读1分钟

问题  ’‘ == [] ?

答案 是true

0.如果有一个操作数是布尔值,则在比较之前先将其转换为数值false转换为0,true转换为1。

1. 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转为数值。


如果一个操作数是对象,另一个不是,那么调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。

在比较时,还需要遵守下面的重要规则:

null和undefined是相等的。

要比较相等性之前,不能将null和undefined转换为其他值。如果有一个操作数是NaN,则相等操作符返回false, 而不相等操作符返回true。

重要提示:即使两个操作符都是NaN,相等操作符也返回false因为按照规则,NaN不等于NaN。

如果两个操作数都是对象,则比较他们是不是同一个对象,如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。而===和!==不会进行强制类型转换。

null==undefined会返回true,因为它们是类似的值;但是null===undefined会返回false,因为它们是不同类型的值。所以在项目中==要谨慎使用,==带来的便利性抵不上带来的阅读成本。

'' == '0' // false == '' // true == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true