为什么isNan(Nan)返回true,而不是false?

时间:2019-04-27 11:59:26

标签: javascript

我只是在玩NaN和isNaN()。有趣的是,我发现NaN的“类型”是一个数字!作为一名好奇的学习者,我自然而然地想到:“如果NaN是一个数字,例如4,则isNaN(NaN)也应该返回FALSE,就像isNaN(4)是FALSE”。

因此,我对此进行了一个简单的实验。当然,它返回TRUE!我知道“好吧,NaN是NaN,所以isNaN(NaN)是真实的”。但是我对JavaScript的思考过程更感兴趣。当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)}

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都是数字时,如何评估上述结果?

1 个答案:

答案 0 :(得分:0)

可能重复链接中的某些答案可能对此问题有答案,但我想补充一点,熟练和经验丰富的开发人员的话有时可能是正确的,但此问题的正确答案应在下面:

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

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

我希望这个答案有帮助。

相关问题