一、 特殊的隐式转换
- NaN == NaN // false
- null == undefined // true
- '' == 0 // true
- true == 1 // true
在JavaScript中进行相等性比较时需要特别注意NaN的特殊性。
NaN == NaN 的结果是false。因为NaN和任何值比较(包括它自己)都返回false。这是JavaScript中的一个特殊规则,NaN是JavaScript中唯一一个不等于自身的值。
null == undefined 的结果是true。在JavaScript中进行相等(==)比较时,null和undefined是相等的。这是因为它们在进行松散相等比较时会进行类型转换。
'' == 0 的结果是true。这是因为在使用==运算符时,空字符串''会被转换为数字0,所以两者相等。
true == 1 的结果是true。在进行==比较时,布尔值true会被转换为数字1,因此true == 1返回true。
补充说明:如果想要进行严格相等比较,应使用===运算符,它不会进行类型转换,此时这些比较的结果可能会不同。但本题使用的是==运算符,因此只有NaN == NaN的结果是false。
二、真值假值
假值
只有以下 8 个值会被视为 false:
- **
false** - 布尔值 false - **
0** - 数字 0 - **
-0** - 负零 - **
0n** - BigInt 类型的 0 "" 或''或``- 空字符串- **
null** - 空值 - **
undefined** - 未定义 - **
NaN** - 非数字
真值(Truthy Values)
除了上述 8 个假值之外的所有值都是真值,包括:
// 一些容易混淆的真值示例
- true // 布尔值 true
- 1, -1, 3.14 // 任何非零数字
- "0", "false" // 非空字符串(即使是"0"或"false")
- [] // 空数组
- {} // 空对象
- function() {} // 空函数
- Infinity // 无穷大
- new Date() // 日期对象