相等比较和相同
本节目标:区分
===、==和Object.is()的比较规则,避免隐式转换带来的意外。
严格相等
=== 不做类型转换。原始值按类型和值比较;对象按引用身份比较:
js
console.log(1 === "1"); // false
console.log({} === {}); // false,不是同一个对象
const value = {};
console.log(value === value); // true日常业务判断通常使用 === 和 !==。
宽松相等
== 会按规范执行类型转换,例如 0 == false 为 true。这可能隐藏数据清洗问题。仅在明确理解转换规则时使用,代码审查时需特别检查 null / undefined 的宽松比较惯用法。
Object.is
Object.is() 与严格相等类似,但对 NaN 和正负零有不同结果:
js
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(0, -0)); // false小结与练习
- 默认使用严格相等,避免隐式类型转换。
- 对象相等判断比较是否为同一引用,不会自动深度比较属性。
Object.is()适合需要精确处理NaN和正负零的场景。
练习:预测 0 == false、0 === false、NaN === NaN、Object.is(-0, 0) 的结果并在控制台验证。