NaN表示非A数字。
看起来angular.isNumber认为它是一个数字。(angularjs 1.4.2)为什么NaN输入的angular.isNumber返回true?
谢谢
发布于 2015-07-18 06:20:23
引用IgorMinar,Angular Developer在这个question中
节点$
>编号的类型‘NaN’
如果你用双眼斜视并塞住你的耳朵,这是有意义的。
如果你故意在你的应用中使用NaN,你应该使用isNaN而不是angular.isNumber。
我倾向于说,目前的行为,尽管有点令人惊讶,但与NaN在javascript中的处理方式是一致的。如果你对改变行为有一些很好的理由,请与我们分享。
因此,这个问题实际上是针对javascript标准本身,而不是针对Angular。
要回答这个问题,我们必须去ECMAScript 5 specification of number type,当然它是这样说的:
4.3.20数字类型
所有可能的数值的集合,包括特殊的“非数字”非数值(,NaN)值、正无穷大和负无穷大
4.3.23 NaN
数值,它是一个IEEE754“非数字”值
是的,根据最新的ECMAScript Specification,我是一个数字
发布于 2015-07-18 06:10:18
这是我能想到的最好的解释方法。
尽管NaN的值表示的不是数字,但值NaN本身仍然是一个数字类型(从类型系统的意义上讲)。
它也是IEEE754中定义的浮点数的值,这也是JavaScript用于数字的值。infinity和NaN的值应该是number类型,这是合理的。
发布于 2015-07-18 06:23:15
ECMA spec将NaN定义为IEEE754非数字数值。NaN global是一个数字的一个原因是比较的目的。它还需要表示未定义的数值结果,如Math.sqrt(-1)的值。所以它不是特定于AngularJS的。请考虑以下几点:
typeof NaN === "number" // true
typeof NaN === typeof NaN // true
typeof NaN === typeof 123 // true
NaN === NaN // false
isNaN(NaN) // true
isNaN(123) // false
isNaN('123') // false
isNaN('|23') // true因此,isNumber对NaN返回true,因为它是一个Number。要检查数字,请使用isNaN()。
https://stackoverflow.com/questions/31485360
复制相似问题