Javascript 关于Number.isNaN的混淆

Javascript 关于Number.isNaN的混淆,javascript,Javascript,我正在用流利的Javascript学习Javascript 在第2章中,有一段代码: let theNumber = Number(prompt("Pick a number")); if (!Number.isNaN(theNumber)) { console.log("Your number is the square root of " + theNumber * theNumber); } 我试图理解Number.isNaN方法,并查看W3schools

我正在用流利的Javascript学习Javascript

在第2章中,有一段代码:

let theNumber = Number(prompt("Pick a number"));
if (!Number.isNaN(theNumber)) {
  console.log("Your number is the square root of " +
              theNumber * theNumber);
}
我试图理解Number.isNaN方法,并查看W3schools,我得到了以下示例:

Number.isNaN(123) //false
Number.isNaN(-1.23) //false
Number.isNaN(5-2) //false
Number.isNaN(0) //false
Number.isNaN('123') //false
Number.isNaN('Hello') //false
Number.isNaN('2005/12/12') //false
Number.isNaN('') //false
Number.isNaN(true) //false
Number.isNaN(undefined) //false
Number.isNaN('NaN') //false
Number.isNaN(NaN) //true
Number.isNaN(0 / 0) //true
关于这个例子,我不理解的是“Hello”不是一个数字,为什么它返回false

因此,如果Number.isNaN('Hello')返回false,将'Hello'应用于上述提示,则此(!Number.isNaN(theNumber))将返回true,然后它将执行此命令

console.log("Your number is the square root of " + theNumber * theNumber);
“你好”*“你好”

我很困惑

有两个
.isNaN()
函数:一个在全局范围内,另一个是
Number
的属性。全局
isNaN()
首先将其参数强制为一个数字,然后检查它是否为
NaN
值<但是,code>Number.isNaN()不执行类型强制。因此,
'Hello'
不是
NaN
,因为它不是;这是字符串
'Hello'
。只有实际数字
NaN
将从
number.isNaN()
返回true


请注意,令人困惑的是,虽然
NaN
表示“不是数字”,但它在JavaScript数据类型意义上并不表示它。它是浮点数字系统的一部分,这意味着位模式不符合数字表示的标准规则。它不会给你一个问题的答案,因此,“任何不是数字的东西。”isNaN只检查is的值是NaN。如果您尝试Number(+“Hello”),它将返回true。因此,此处的+符号尝试将“Hello”转换为数字,但失败并返回NAN。

NAN
是数字类型的特殊值。版本的Number.isNaN检查传递值是否真的为“NaN”(数字类型且为NaN),而不是任何非数字,全局“isNaN”会执行此操作

它类似于
Number.isTwo(a)
(如果存在),如果a正好是2,则返回'true'

Number.isNaN(a)
仅当a正好是
NaN
时才返回true

Number.isNaN(NaN) -> return true
Number.isNaN(!'Hello') -> return true because !'Hello' returns NaN
看看下面Number.isNaN的实现,它可以很好地解释:

function isNaN(input) {
    return typeof input === 'number' && input !== input;
}
我相信“你好”不会通过这个条件


谢谢:),我想我不明白的是。。。“Hello”不是字符串,也不是数字,为什么它会为number.isNaN返回false?因为这不是
number.isNaN()
的设计目的。
let theNumber = Number(prompt("Pick a number"));
if (!Number.isNaN(theNumber)) {
  console.log("Your number is the square root of " +
              theNumber * theNumber);
}