isNaN() 真的有必要吗?
Is isNaN() really necessary?
根据 MDN page1 关于 isNaN
(强调我的):
Unlike all other possible values in JavaScript, it is not possible to rely on the equality operators (== and ===) to determine whether a value is NaN or not, because both NaN == NaN and NaN === NaN evaluate to false. Hence, the necessity of an isNaN function.
但是,由于 NaN
是 JavaScript 中唯一与自身比较不相等的值,实际上可以依靠严格相等运算符来确定 明确地,无论一个值是NaN
还是不是:
const value = NaN;
console.log(value === value)
也就是说,那句 MDN 的解释是什么?
PS:我确实知道 MDN 不是官方文档(那将是 ECMA),就像任何人都可以编辑它的 wiki 一样。尽管如此,它还是一个非常可靠的来源。
1:该问题发布后该段已被编辑,由回答者
不,不需要 built-in isNaN
函数。 isNaN
只是为了方便。当然,可以手动执行:
const isNaN = arg => arg !== arg
对于您想在其中执行此类操作的每个脚本,但它会很乏味。
或者,如果没有该函数,请考虑阅读如下代码:
if (parsedNumber !== parsedNumber) {
// It's NaN
}
那看起来真的很奇怪,让代码尽可能可读符合程序员的最大利益。
根据 MDN page1 关于 isNaN
(强调我的):
Unlike all other possible values in JavaScript, it is not possible to rely on the equality operators (== and ===) to determine whether a value is NaN or not, because both NaN == NaN and NaN === NaN evaluate to false. Hence, the necessity of an isNaN function.
但是,由于 NaN
是 JavaScript 中唯一与自身比较不相等的值,实际上可以依靠严格相等运算符来确定 明确地,无论一个值是NaN
还是不是:
const value = NaN;
console.log(value === value)
也就是说,那句 MDN 的解释是什么?
PS:我确实知道 MDN 不是官方文档(那将是 ECMA),就像任何人都可以编辑它的 wiki 一样。尽管如此,它还是一个非常可靠的来源。
1:该问题发布后该段已被编辑,
不,不需要 built-in isNaN
函数。 isNaN
只是为了方便。当然,可以手动执行:
const isNaN = arg => arg !== arg
对于您想在其中执行此类操作的每个脚本,但它会很乏味。
或者,如果没有该函数,请考虑阅读如下代码:
if (parsedNumber !== parsedNumber) {
// It's NaN
}
那看起来真的很奇怪,让代码尽可能可读符合程序员的最大利益。