在 JavaScript 中,比较两个值是否相等是一个常见的操作,但这个过程可能比你想象的要复杂。JavaScript 使用两种主要的相等性比较操作符:==
(等于)和 ===
(严格等于)。这两种操作符在比较值时的行为有很大的不同,特别是在处理不同类型的值时。本文将详细探讨 JavaScript 中的类型相等性比较,包括特殊值(如 NaN
、undefined
和 null
)的处理,以及原始值和对象之间的转换。
一、类型相等(==
)与严格相等(===
)
在 JavaScript 中,==
操作符被称为“等于”操作符,它在比较两个值时会进行类型转换。但如果两个值的类型相等(等同于严格模式 === 判断)
console.log(1 == 1); // true
如果是复杂类型比较空间地址
console.log({} == {}); // false
另一方面,===
操作符被称为“严格等于”操作符,它不会进行类型转换。如果两个值的类型不同,===
将直接返回 false
:
console.log(1 === '1'); // false
二、特殊值的比较
JavaScript 中有几个特殊的值,它们在比较时有特殊的规则:
null
和undefined
是两个特殊的值,它们在逻辑上被认为是相等的,但它们不等同于任何其他值:
console.log(undefined == null); // true
console.log(undefined == false);