【问题标题】:Is isNaN() really necessary?isNaN() 真的有必要吗?
【发布时间】:2021-01-25 02:43:12
【问题描述】:

根据MDN page1 关于isNaN(强调我的):

与 JavaScript 中的所有其他可能值不同,不可能依靠相等运算符(== 和 ===)来确定值是否为 NaN,因为 NaN == NaN 和 NaN === NaN 评估为假。 因此,isNaN 函数的必要性。

然而,由于 NaN 是 JavaScript 中唯一会与自身比较不相等的值,实际上可以依靠严格相等运算符来确定,明确,一个值是否是NaN与否:

const value = NaN;
console.log(value === value)

也就是说,那个 MDN 句子的解释是什么?


PS:我确实理解 MDN 不是官方文档(那将是 ECMA),就像任何人都可以编辑它的 wiki。尽管如此,它还是一个非常可靠的来源。

1:在此问题发布后,该段落已被回答者as mentioned 编辑。

【问题讨论】:

    标签: javascript nan


    【解决方案1】:

    不,不需要内置isNaN 函数。 isNaN 只是为了方便起见。当然,可以手动执行:

    const isNaN = arg => arg !== arg
    

    对于您想在其中执行此类操作的每个脚本,但这会很乏味。

    或者,如果没有该函数,请考虑阅读如下代码:

    if (parsedNumber !== parsedNumber) {
      // It's NaN
    }
    

    这看起来真的很奇怪,让代码尽可能可读符合程序员的最大利益。

    【讨论】:

    • 我明白,谢谢。我对那个特定的 MDN 声明感到困惑。因此,既然只是为了方便(我也这么认为),我们可以同意这句话是完全错误的吗?
    • 是的。很确定它是用来阅读的——“你不能使用someVar === NaN 来测试。”我将对其进行编辑以澄清
    • 我认为你搞定了,这可能就是这里发生的情况:作者可能的意思是“你不能将变量与 NaN 进行比较”,但他/她忘记了可以比较变量本身,因此严格相等运算符 可以 用于明确确定变量是否为NaN...
    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2017-10-29
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多