【问题标题】:Why is isNan(Nan) returns true, not false?为什么 isNan(Nan) 返回 true,而不是 false?
【发布时间】: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 都是数字时,它是如何评估上述结果的?

【问题讨论】:

标签: javascript


【解决方案1】:

可能重复链接中的一些答案可能会回答这个问题,但我想补充一点,熟练和经验丰富的开发人员的话有时可能是正确的,但这个问题的正确答案应该如下:

要了解某事物的工作原理,请查看描述该事物的规格和工作原理的手册。

例如,在这种情况下,问题是javascript如何使用isNaN()函数评估NaN对象,这最终是所述函数和对象的规范问题。因此,我们查看 ecmascript 文档中对isNaN() 函数的描述,其中也有对Number.isNaN() 函数的描述以进行比较。您还可以查看NaN 对象的描述,以更好地理解测试结果背后的概念。

我希望这个答案会有所帮助。

【讨论】:

  • 伊恩,这正是我要问的那种答案。我想知道 JS 在被赋予特定任务时是如何思考的。我不知道你给我链接的 ECMAScript 标准页面(我应该知道哈哈),我现在要好好品味它们!非常感谢您的时间和知识。非常感谢。
  • 所以如果其他人想知道答案,如果我们查看上面提供的链接,我们可以发现 isNaN() 函数检查参数是否为 NaN。它不检查参数是否为数字。在 JS 的世界里,NaN 属于数字类型。所以 3 也是一个数字,这里的 NaN 也是一个数字。由于 isNaN() 函数检查参数是否为 NaN,因此 isNaN(3) 为假,因为它不是 NaN。但 isNaN(NaN) 为真,因为它是一个 NaN。所以 NaN 是一个数字,并且是一个 NaN。大声笑。
猜你喜欢
  • 1970-01-01
  • 2015-05-12
  • 2021-03-21
  • 2013-12-17
  • 2014-05-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2013-09-18
相关资源
最近更新 更多