JavaScript 相等判断


1. =====

(1) ‘==’ 会进行隐式的类型转换。

  • 如果有一个操作数是布尔型,比较之前会转换为数值;
  • 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
  • 如果一个操作数是对象,另一个不是,比较之前会调用对象的 valueOf() 方法,再按照之前的规则比较;

特例:

  • NaN 和任何操作数相等比较都是 false,而不等于操作返回 true;
  • null 和 undefined 不会进行转换。

总之,最终都转换为数值进行比较了。

(2) ‘===’ 是严格等于,不会进行类型转换。左右值类型不同,直接返回 false。

2. Object.is()

大多数时候和‘===’一样。 特例:

  • NaN 与 NaN 比较返回 true;
  • +0 不等于 -0。

equals