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

Javascript 为什么isNan(Nan)返回true而不是false?,javascript,Javascript,我只是在和NaN和isNaN玩。有趣的是,我发现NaN的类型是一个数字!作为一个好奇的学习者,我自然会想,如果NaN是一个数字,比如4,那么isNaNNaN也应该返回FALSE,比如isNaN4是FALSE 所以我做了一个简单的实验。当然,它返回了真的!我明白,好吧,NaN是NaN,isNaNNaN是真的。但我对JavaScript的思维过程更感兴趣。当typeof NaN是NUMBER时,JS如何评估isNaNNaN为true?下面显示的代码是我为探索此问题所做的: 设试验=4; consol

我只是在和NaN和isNaN玩。有趣的是,我发现NaN的类型是一个数字!作为一个好奇的学习者,我自然会想,如果NaN是一个数字,比如4,那么isNaNNaN也应该返回FALSE,比如isNaN4是FALSE

所以我做了一个简单的实验。当然,它返回了真的!我明白,好吧,NaN是NaN,isNaNNaN是真的。但我对JavaScript的思维过程更感兴趣。当typeof NaN是NUMBER时,JS如何评估isNaNNaN为true?下面显示的代码是我为探索此问题所做的:

设试验=4; console.log1。我们将测试这个值:${test}。 1-A.产量类型:${Typeof test}; 1-B.isNaN产量:${isNaNtest}; 1-C.Number.isNaN产生:${Number.isNaNtest}

测试=NaN; console.log2。我们将测试这个值:${test}。 2-A.产量类型:${Typeof test}; 2-B.isNaN产量:${isNaNtest}; 2-C.Number.isNaN产生:${Number.isNaNtest}

结果是: 1-A/1-B/1-C=编号/错误/错误 2-A/2-B/2-C=数字/正确/正确


正如我之前解释的,这个结果对我来说很有意义,NaN实际上就是NaN。但我更感兴趣的是JS的思维过程。当typeof是两个数字时,它是如何评估上述结果的?

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

要了解某个东西是如何工作的,就要查看描述该东西的规格和工作原理的手册

例如,在本例中,问题是javascript如何使用isNaN函数计算NaN对象,这最终是所述函数和对象的规范问题。因此,我们看一下ecmascript文档中的函数描述,其中也有用于比较的函数描述。您还可以查看对象的描述,以便更好地理解测试结果背后的概念


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

这里有一篇很好的文章解释了NaN!==NaN问题isNaN检查您传递的值是否为NaN值。它不检查参数的类型!=数字,这不是NotANumber的意思。谢谢你的评论。我要寻找的答案可以在JS ECMAScript语言规范中找到!伊恩,这正是我要问的答案。我想知道JS在完成特定任务时的想法。我不知道ECMAScript的标准页面,你给了我我应该知道的链接,哈哈,我现在要好好品味一下了!非常感谢您的时间和知识。非常感谢。如果其他人想知道答案,如果我们查看上面提供的链接,我们会发现isNaN函数检查参数是否为NaN。它不检查参数是否为数字。在JS的世界里,NaN属于数字类型。3也是一个数字,NaN也是一个数字。由于isNaN函数检查参数是否为NaN,因此isNaN3为false,因为它不是NaN。但是isNaNNaN是真的,因为它是一个NaN。所以NaN是一个数字,也是一个NaN。英雄联盟