NAN/0/1/unefined...

5 阅读1分钟

一、 特殊的隐式转换

  1. NaN == NaN // false
  2. null == undefined // true
  3. '' == 0 // true
  4. 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

  1. **false**​ - 布尔值 false
  2. **0**​ - 数字 0
  3. **-0**​ - 负零
  4. **0n**​ - BigInt 类型的 0
  5. "" ​ 或 ''``- 空字符串
  6. **null**​ - 空值
  7. **undefined**​ - 未定义
  8. **NaN**​ - 非数字
真值(Truthy Values)

除了上述 8 个假值之外的所有值都是真值,包括:

// 一些容易混淆的真值示例

  1. true // 布尔值 true
  2. 1, -1, 3.14 // 任何非零数字
  3. "0", "false" // 非空字符串(即使是"0"或"false")
  4. [] // 空数组
  5. {} // 空对象
  6. function() {} // 空函数
  7. Infinity // 无穷大
  8. new Date() // 日期对象