Javascript 为什么angular.isNumber(NaN)返回true?
NaN表示非数字 似乎angular.isNumber认为它是一个数字。(angularjs 1.4.2) 为什么angular.isNumber对于NaN输入返回trueJavascript 为什么angular.isNumber(NaN)返回true?,javascript,angularjs,nan,Javascript,Angularjs,Nan,NaN表示非数字 似乎angular.isNumber认为它是一个数字。(angularjs 1.4.2) 为什么angular.isNumber对于NaN输入返回true 谢谢它与angular无关,它是JavaScript 试试这个 它将返回number很可能只是使用您传入的内容的类型。如果类型为number,则返回true 如果你想知道某件事是否是一个数字(不包括NaN),你可以做以下事情 function isNumber(val){ return angular.isNumber(
谢谢它与angular无关,它是
JavaScript
试试这个
它将返回
number
很可能只是使用您传入的内容的类型。如果类型为number,则返回true
如果你想知道某件事是否是一个数字(不包括NaN),你可以做以下事情
function isNumber(val){
return angular.isNumber(val) && (val == val);
}
这是通过首先确定val是否是一个数字来实现的。如果是,检查是否是NaN
NaN不等于它本身(或任何其他数字)。以下是我能想到的最好的解释方法 尽管
NaN
的值表示的不是数字,但值NaN
本身仍然是数字类型(在类型系统意义上)
它也是IEEE 754中浮点数的定义值,JavaScript使用浮点数表示数字。值infinity和NaN是数字类型,这是明智的 这里的“数字”实际上有两种含义:
- 缩写“NaN”意味着对特定的数学运算没有有意义的答案;你可以说“没有这样的数字”
- 然而,像JS这样的语言中的每个值都有一个类型,在JS中,进出数学运算的数据类型称为“数字”;因此,当JS想要一个特殊值来表示数学运算没有答案时,这个特殊值就是一个特殊的数字
isFinite
函数,用于不需要的情况。引用Angular Developer,具体如下:
如果你眯起双眼,塞住眼睛,这是有道理的
耳朵
如果您在应用程序中故意使用NaN,则应改用isNaN
关于角数
我倾向于说当前的行为,尽管有点
令人惊讶的是,与javascript中处理NaN的方式一致。
如果你有一些改变行为的好理由,请分享
他们和我们在一起
所以问题是javascript标准本身,而不是角度
为了回答这个问题,我们必须去,当然它说:
4.3.20数字类型
所有可能的数值集,包括特殊的“非数字”
(NaN)值、正无穷大和负无穷大
4.3.23 NaN
数值这是IEEE 754“非数字”值
因此,是的,根据最新的《我是一个数字》将NaN定义为IEEE 754非数字值。作为一个数字的一个原因是比较的目的。它还需要表示未定义的数值结果,如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
。要检查数字,请使用。向我们展示完整的代码示例,以便我们能提供更多帮助。如果不是数字,NaN还会是什么?伙计,我完全是一个数字。非常相关:这里很容易找到最好的答案-你很少能够以“我在使用库,为什么它会这样?”的形式明确回答问题+1OMFG@NaN你真是一个数字,我不明白这里面有什么困惑谢谢你的详细回答用户名签出
$ node
> typeof NaN
'number'
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