Javascript == 和 === 区别

比较

最主要的区别,== 会在比较前进行转化,而 === 比较前不进行转化。

1
2
var result1 = ('55' == 55) // true,因为转换后相等
var result2 = ('55' === 55) // false,因为不同的数据类型不相等

相等 ==

相等操作符会先转换操作数(通常称为强制转型),然后再比较它们的相等性。

在转换时:
如果有一个操作数是布尔值,则在比较相等性之前将其转换为数值—— false 为 0,true 为 1。
如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。
如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较。

在比较时:
null 和 undefined 是相等的。
要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。
如果有一个操作数是 NaN(两个 NaN也是),则相等操作符返回 false。
如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象则返回 true。

全等 ===

除了在比较之前不转换操作数之外,全等和不全等操作符与相等和不相等操作符没有什么区别。它只在两个操作数未经转换就相等的情况下返回 true。

参考

  • JavaScript 高级程序设计 P52