📜  (NaN != NaN) 和 (NaN !== NaN) 有什么区别?(1)

📅  最后修改于: 2023-12-03 14:58:59.846000             🧑  作者: Mango

NaN != NaN 和 NaN !== NaN 的区别

在 JavaScript 中,NaN 表示不是一个数(Not a Number)。当一些操作无法返回有效结果时,常常会返回 NaN。例如:

console.log(0/0); // NaN
console.log(Math.sqrt(-1)); // NaN
console.log(parseInt("abc")); // NaN

然而,奇怪的是,NaN 不等于任何值,包括自身。这就引出了下面的问题:

  • (NaN == NaN) 的结果是什么?
  • (NaN === NaN) 的结果是什么?
(NaN == NaN)

这个问题比较简单。使用 == 进行比较时,会自动进行类型转换,因此:

console.log(NaN == NaN); // false

结果是 false,也就是说,NaN 不等于自身。

这是因为 JavaScript 规定,当使用 == 进行比较时,如果两个操作数类型不同,则会先将它们转换为相同类型,再进行比较。NaN 与任何数(包括自身)做任何比较操作,结果都为 false,这是 NaN 的定义。

(NaN === NaN)

这个问题稍微复杂一些。使用 === 进行比较时,不会进行类型转换,因此:

console.log(NaN === NaN); // false

结果同样是 false

不同于 ==!== 运算符同样不会进行类型转换,因此:

console.log(NaN !== NaN); // true

结果是 true

总结

在 JavaScript 中,NaN 不等于任何值,包括自身。使用 == 进行比较时,会先进行类型转换,因此 (NaN == NaN) 的结果是 false;使用 ===!== 进行比较时,不会进行类型转换,因此 (NaN === NaN) 的结果是 false(NaN !== NaN) 的结果是 true

需要注意的是,在实际开发中,应避免将任何值与 NaN 进行比较,应该使用 isNaN() 函数检测一个值是否为 NaN。