【发布时间】:2019-04-27 11:59:26
【问题描述】:
我只是在玩弄 NaN 和 isNaN()。有趣的是,我发现 NaN 的“类型”是一个数字!作为一个好奇的学习者,我很自然地想,“如果 NaN 是一个数字,比如 4,那么 isNaN(NaN) 也应该返回 FALSE,比如 isNaN(4) 是 FALSE”。
所以我对此进行了一个简单的实验。当然,它返回 TRUE!我明白“好吧,NaN 是 NaN 所以 isNaN(NaN) 是真的”。但我更感兴趣的是 JavaScript 的思考过程。当 typeof NaN 为 NUMBER 时,JS 如何评估 isNaN(NaN) 为真?下面显示的代码是我为探索这个问题所做的:
让测试 = 4;
console.log(1. We will test this value: ${test}.
1-A. Typeof yields: ${typeof test};
1-B. isNaN() yields: ${isNaN(test)};
1-C. Number.isNaN() yields: ${Number.isNaN(test)})
测试 = NaN;
console.log(2. We will test this value: ${test}.
2-A. Typeof yields: ${typeof test};
2-B. isNaN() yields: ${isNaN(test)};
2-C. Number.isNaN() yields: ${Number.isNaN(test)})
结果是: 1-A/1-B/1-C = 数字/假/假 2-A/2-B/2-C = 数字/真/真
正如我之前解释的,这个结果对我来说很有意义,NaN 实际上是 NaN。但我更感兴趣的是 JS 的思维过程。当 typeof 都是数字时,它是如何评估上述结果的?
【问题讨论】:
-
这是一篇很好的文章来解释 NaN !== NaN 问题adripofjavascript.com/blog/drips/…
-
isNaN检查您传递的值是否为NaN值。它不检查typeof arg != "number",这不是NotANumber 的意思。 -
感谢 cmets。我一直在寻找的答案是在 JS 规范(ECMAScript 语言规范)中找到的!
标签: javascript