isNaN(1)和isNaN(“1”)返回false

时间:2014-02-27 18:30:16

标签: javascript

为什么我的屏幕截图isNaN(1)isNaN("1")会返回false?因为其中一个是数字,其中一个是字符串,所以isNaN(“1”)应该返回true。

enter image description here

2 个答案:

答案 0 :(得分:7)

来自MDN

  

isNaN函数的参数不是Number类型时,该值首先被强制转换为数字。然后测试得到的值以确定它是否是NaN。因此,对于非数字,当强制转换为数字类型时会产生有效的非NaN数值(特别是空字符串和布尔基元,当强制赋予数值0或1时),“false”返回值可能是意外的;例如,空字符串肯定是“不是数字。”

如果您不想要此行为,本文还建议使用(经验Number.isNaN函数:

console.log(Number.isNaN("1")) // false
console.log(Number.isNaN(NaN)) // true

或更简单:

console.log("1" != "1") // false
console.log(NaN != NaN) // true

但是,如果你真的想要简单地确定类型Number的值(而不是String类型的值),只需使用typeof

console.log(typeof "1" == "number") // false
console.log(typeof 1 == "number")   // true

但是这会为true返回NaN,因为尽管被称为“非数字”,但它实际上是Number类型的值。如果您想确保值为Number类型,并且有效的有限数字使用( experimental Number.isFinite

console.log(Number.isFinite("1")) // false
console.log(Number.isFinite(1))   // true
console.log(Number.isFinite(NaN)) // false

或者只是创建自己的:

function myIsFinite(x) { return typeof x == "number" && isFinite(x); }
console.log(myIsFinite("1")) // false
console.log(myIsFinite(1))   // true
console.log(myIsFinite(NaN)) // false

答案 1 :(得分:0)

isNaN函数会先将输入转换为数字,然后确定结果数是否为NaN。