我正在使用Eloquent Javascript学习Javascript。
在第二章中,有一段代码:
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);“你好”*“你好”??
我很困惑..。
发布于 2020-03-29 01:38:33
有两个.isNaN()函数:一个在全局范围内,另一个是Number的属性。全局isNaN()首先将其参数强制为一个数字,然后检查它是否为NaN值。但是,Number.isNaN()不执行类型强制。因此,'Hello'不是NaN,因为它不是;它是字符串'Hello'。只有实际的数字NaN才会从Number.isNaN()返回true。
请注意,令人困惑的是,虽然NaN的意思是“不是数字”,但它并不是JavaScript数据类型意义上的数字。它是浮点数字系统的一部分,这意味着位模式不符合数字表示的标准规则。它不会给出问题的答案,因此,“任何不是数字的东西”。
发布于 2020-03-29 01:40:09
如果值为NaN,则isNaN仅检查。如果你尝试Number(+"Hello"),它将返回true。所以这里的+符号尝试将"Hello“转换为number,但失败并返回NAN。
发布于 2020-03-29 01:46:48
NaN是Number类型的特殊值。Number.isNaN的版本检查传递值是否真的是'NaN‘(number类型,并且是NaN),而不是任何不是A Number的值,全局的'isNaN’会这样做。
它类似于Number.isTwo(a) (如果它存在),如果a恰好是2,则返回'true‘。
只有当a恰好为NaN时,Number.isNaN(a)才返回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;
}https://stackoverflow.com/questions/60904434
复制相似问题