NaN代表非数字。
看起来angular.isNumber认为它是一个数字。 (angularjs 1.4.2) 为什么angular.isNumber对于NaN输入返回true?
感谢
答案 0 :(得分:3)
引用IgorMinar,Angular Developer的确切question:
$ node > typeof NaN 'number'
如果你双眼眯眼并插上你的眼睛,这是有道理的 耳朵。
如果您故意在应用中使用NaN,则应使用isNaN angular.isNumber。
我倾向于说当前的行为,即使有点 令人惊讶的是,与在javascript中处理NaN的方式一致。 如果您有一些改变行为的好参数请分享 他们和我们在一起。
所以问题实际上是javascript标准本身不适用于Angular
要回答这个问题,我们必须转到ECMAScript 5 specification of number type,当然它会说:
4.3.20号码类型
设置所有可能的数字值,包括特殊的“非数字” (NaN)值,正无穷大和负无穷
4.3.23 NaN
数值,即IEEE 754“非数字”值
所以是的,根据最新的ECMAScript Specification我是一个数字
答案 1 :(得分:1)
这是我能想到解释这个问题的最佳方式。
虽然NaN
的值代表的某些不是数字,但值NaN
本身仍然是数字类型(在类型系统感)。
它也是IEEE 754中浮点数的定义值,这是JavaScript用于数字的。值无穷大和NaN是数字类型是明智的。
答案 2 :(得分:1)
ECMA spec将NaN定义为IEEE 754 Not-a-Number数字值。 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()
。
答案 3 :(得分:0)
它与角度无关,它是JavaScript
试试这个
typeof NaN
它将返回number
答案 4 :(得分:0)
很可能angular只使用你传入的类型。如果类型是数字,那么它返回true。
如果您想知道某些内容是否为数字(不包括NaN),您可以执行以下操作。
function isNumber(val){
return angular.isNumber(val) && (val == val);
}
首先确定val是否为数字。如果检查它是否是NaN。
NaN不等于它自己(或任何其他数字)。
答案 5 :(得分:0)
"数字"有两个含义。这里:
请注意,这种明显的矛盾在其他语言中不太明显,因为JS只有一种数字类型,而不是(至少)整数和实数/浮点类型。将NaN作为浮点值是几乎所有现代语言的标准,但由于单词" number",它在JS中似乎更令人惊讶。
Angular函数是用于测试值类型的一组实用程序之一。 The documentation for it提到它对于无穷大和NaN都返回true,并指向标准isFinite
函数,以确定何时不可取。