Javascript 为什么Number.isNaN(';abc';)的结果为假?

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

我查看了MDN文档和其他堆栈溢出问题,但是没有找到这个问题的确切原因。我知道isNaN尝试将值解析为number,但当我尝试在'abc'上运行number.parseInt或number.parseFloat时,它会给我'NaN',但当我实际运行isNaN函数时,它会给我'false'

我知道有更好的方法来检查某个东西是否是数字,比如number.isFinite(),但在本例中,我试图了解isNaN是如何工作的

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
定义为:

  • 如果Type(number)不是number,则返回
    false
  • 如果数字为
    NaN
    ,则返回
    true
  • 否则,返回
    false


  • 请注意,还有一个全局函数,其行为不同:如果给它一个非数字类型的值,它会在执行检查之前将其转换为数字类型。因此
    isNaN('abc')
    true
    ,因为如果使用默认字符串到数字的转换将
    'abc'
    转换为数字,则会得到
    NaN
    ;但是
    Number.isNaN('abc')
    false
    ,因为它不进行转换。

    因为
    'abc'
    的类型不是Number。“isNaN试图将值解析为数字”-不,它没有。看见你可能会想到全局版本。是的,在这种情况下,isNAN不应该是真的而不是假的吗?isNAN代表的不是数字,对吗?“我知道isNAN试图将值解析为数字,”-没错,全局函数就是这么做的。但是,您调用的是具有不同操作的不同函数。它从字面上检查您给它的值是否为
    NaN
    ,而不是它是否转换为
    NaN
    否,字符串不是
    数字
    ,但它也不是数值
    NaN
    @Link,它代表的是值“不是数字”。不适用于任何碰巧不是数字的值。