Javascript 为什么Number.isNaN(';abc';)的结果为假?
我查看了MDN文档和其他堆栈溢出问题,但是没有找到这个问题的确切原因。我知道isNaN尝试将值解析为number,但当我尝试在'abc'上运行number.parseInt或number.parseFloat时,它会给我'NaN',但当我实际运行isNaN函数时,它会给我'false' 我知道有更好的方法来检查某个东西是否是数字,比如number.isFinite(),但在本例中,我试图了解isNaN是如何工作的Javascript 为什么Number.isNaN(';abc';)的结果为假?,javascript,undefined-behavior,Javascript,Undefined Behavior,我查看了MDN文档和其他堆栈溢出问题,但是没有找到这个问题的确切原因。我知道isNaN尝试将值解析为number,但当我尝试在'abc'上运行number.parseInt或number.parseFloat时,它会给我'NaN',但当我实际运行isNaN函数时,它会给我'false' 我知道有更好的方法来检查某个东西是否是数字,比如number.isFinite(),但在本例中,我试图了解isNaN是如何工作的 console.log(Number.parseInt('abc')); con
console.log(Number.parseInt('abc'));
console.log(Number.parseFloat('abc'));
console.log(Number.isNaN('abc'))
NaN
是一个特殊的数字值Number.isNaN
验证传入值是否等于NaN
,因为“正常”比较不起作用(NaN==NaN
根据定义为false
)
与其他一些方法不同,Number.isNaN
不执行类型转换<代码>“abc”是一个字符串值,因此它不能是NaN
将编号.isNaN
定义为:
false
NaN
,则返回true
false
请注意,还有一个全局函数,其行为不同:如果给它一个非数字类型的值,它会在执行检查之前将其转换为数字类型。因此
isNaN('abc')
是true
,因为如果使用默认字符串到数字的转换将'abc'
转换为数字,则会得到NaN
;但是Number.isNaN('abc')
是false
,因为它不进行转换。因为'abc'
的类型不是Number。“isNaN试图将值解析为数字”-不,它没有。看见你可能会想到全局版本。是的,在这种情况下,isNAN不应该是真的而不是假的吗?isNAN代表的不是数字,对吗?“我知道isNAN试图将值解析为数字,”-没错,全局函数就是这么做的。但是,您调用的是具有不同操作的不同函数。它从字面上检查您给它的值是否为NaN
,而不是它是否转换为NaN
否,字符串不是数字
,但它也不是数值NaN
@Link,它代表的是值“不是数字”。不适用于任何碰巧不是数字的值。