请解释下NaN === NaN的结果

在 JavaScript 中,NaN === NaN 的结果是 false

尽管 NaN 代表“非数字”(Not a Number),两个 NaN 之间并不相等。这是 JavaScript 规范中定义的行为,也符合 IEEE 754 浮点数标准。

原因:

NaN 可以由多种不同的非法数学运算产生,例如 0/0Infinity - InfinityMath.sqrt(-1) 等。虽然它们都表示非数字的结果,但它们并不一定代表相同的“非数字”值。因此,规范规定任何 NaN 与任何值(包括自身)比较都返回 false

如何判断一个值是否为 NaN:

由于 NaN 与自身不相等,不能用 value === NaN 来判断一个值是否为 NaN。正确的方法是使用全局函数 isNaN()Number.isNaN()

  • isNaN(value): 会先尝试将 value 转换为数字,然后再判断是否为 NaN。 如果 value 可以被转换为数字,但转换结果是 NaN,则返回 true。例如,isNaN('hello') 返回 true,因为 'hello' 转换为数字是 NaN

  • Number.isNaN(value): 不会进行类型转换,只判断 value 是否严格等于 NaN。 这是更推荐的做法,因为它避免了 isNaN() 的隐式类型转换带来的潜在问题。 例如,Number.isNaN('hello') 返回 false,因为 'hello' 不是 NaN,而 isNaN('hello') 返回 true

示例:

console.log(NaN === NaN); // Output: false
console.log(isNaN(NaN)); // Output: true
console.log(Number.isNaN(NaN)); // Output: true

console.log(isNaN('hello')); // Output: true
console.log(Number.isNaN('hello')); // Output: false

let result = 0 / 0;
console.log(result === NaN); // Output: false
console.log(isNaN(result)); // Output: true
console.log(Number.isNaN(result)); // Output: true

总而言之,要判断一个值是否为 NaN,请使用 Number.isNaN()。 不要使用 value === NaN

posted @ 2024-11-26 06:15  王铁柱6  阅读(69)  评论(0编辑  收藏  举报