2015-11-11 43 views
1

isNaN()返回false当且仅当参数是数字。在javaScript中,isNaN()是做什么的?

var a = new Number(1); 

通过这样做,a现在是一个对象。 那么为什么isNaN(a)返回false?

+3

当且仅当它的参数是值“NaN”时,'isNaN'返回true。它在所有其他情况下返回false。 –

+0

您还有其他问题继续吗?如果你的问题解决了,那么你应该标记帮助解决问题的答案。这有助于其他人找到他们正在寻找的东西。快乐编码:) –

回答

6

isNaN()测试输入是否为不是的一个数字。

var a = new Number(1) 

a是一个数字对象。因此isNaN()返回false

这是一个不错的documentation包含isNaN()行为与不同的边缘情况。不幸的是,其中一些并不如预期那么直观,所以值得一读。

+0

_“应该”_? 'isNaN(new Number(1))'___always___返回'true'。 (除非真正的JavaScript解释器被搞砸了) – Cerbrus

+0

好点。我将它改写为更具权威性。 –

2

在测试NaN之前,全球isNaN()函数会将其参数强制转换为数字值。你的对象干净地转换为数字1,而1不是NaN

请注意,isNaN("1")也会返回false,因为字符串"1"干净地转换为不是NaN的数字。

isNaN函数并非真正用作检查某物是否为数字的通用测试。这是对具体数值NaN的测试。它通常用作通用测试,并且(大部分)可用,因为当尝试将值转换为数字时,JavaScript返回NaN失败。这有点不纯,因为NaN作为一个标记在浮点系统中具有特定用途。

除了全局isNaN之外,一些JavaScript环境还有Number.isNaN()。 Number构造函数不首先执行类型强制。因此,Number.isNaN("foo")返回false,因为即使字符串"foo"无法完整地转换为数字,它不是常量NaN