1. ==
和 ===
(1) ‘==’ 会进行隐式的类型转换。
- 如果有一个操作数是布尔型,比较之前会转换为数值;
- 如果一个操作数是字符串,另一个是数值,比较之前会把字符串转换为数值;
- 如果一个操作数是对象,另一个不是,比较之前会调用对象的
valueOf()
方法,再按照之前的规则比较;
特例:
- NaN 和任何操作数相等比较都是 false,而不等于操作返回 true;
- null 和 undefined 不会进行转换。
总之,最终都转换为数值进行比较了。
(2) ‘===’ 是严格等于,不会进行类型转换。左右值类型不同,直接返回 false。
2. Object.is()
大多数时候和‘===’一样。 特例:
- NaN 与 NaN 比较返回 true;
- +0 不等于 -0。