isNaN()
isNaN() 函数用于判断一个值是否为 NaN,如有必要,会首先将该值转换为数字。由于 isNaN() 函数内部的类型强制转换可能出乎意料,因此您可能更倾向于使用 Number.isNaN()。
试一试
function milliseconds(x) {
if (isNaN(x)) {
return "Not a Number!";
}
return x * 1000;
}
console.log(milliseconds("100F"));
// Expected output: "Not a Number!"
console.log(milliseconds("0.0314E+2"));
// Expected output: 3140
语法
isNaN(value)
参数
value-
要测试的值。
返回值
描述
isNaN() 是全局对象的一个函数属性。
对于数字值,isNaN() 测试该数字是否为 NaN。当 isNaN() 函数的参数不是 Number 类型时,该值会首先被强制转换为数字,然后将结果值与 NaN 进行比较。
isNaN() 对于非数字参数的这种行为可能会让人感到困惑!例如,空字符串被强制转换为 0,而布尔值被强制转换为 0 或 1;从直观上来说,这两个值都“不是数字”,但它们不会被评估为 NaN,因此 isNaN() 返回 false。因此,isNaN() 既不能回答“输入是否为浮点数 NaN 值”的问题,也不能回答“输入是否不是数字”的问题。
Number.isNaN() 是一种更可靠的方法来测试一个值是否为数字值 NaN。或者,可以使用表达式 x !== x,这两种解决方案都不会受到全局 isNaN() 不可靠的假阳性的影响。要测试一个值是否为数字,请使用 typeof x === "number"。
isNaN() 函数回答的问题是“在数字上下文中,输入是否功能上等同于 NaN”。如果 isNaN(x) 返回 false,则您可以在算术表达式中使用 x,就像它是一个有效的非 NaN 数字一样。如果 isNaN(x) 返回 true,则 x 将被强制转换为 NaN 并使大多数算术表达式返回 NaN(因为 NaN 会传播)。您可以利用这一点,例如,测试函数参数是否可进行算术处理(可“像”数字一样使用),并通过抛出错误、提供默认值等方式处理非数字值。通过这种方式,您可以编写一个函数,充分利用 JavaScript 根据上下文隐式转换值所提供的全部灵活性。
注意:+ 运算符既执行数字加法也执行字符串连接。因此,即使 isNaN() 对两个操作数都返回 false,+ 运算符仍可能返回一个字符串,因为它不是用作算术运算符。例如,isNaN("1") 返回 false,但 "1" + 1 返回 "11"。为了确保您正在使用数字,请将该值强制转换为数字,并使用 Number.isNaN() 来测试结果。
示例
请注意 isNaN() 如何对那些不是 NaN 值但也不是数字的值返回 true
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// Strings
isNaN("37"); // false: "37" is converted to the number 37 which is not NaN
isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN
isNaN("37,5"); // true
isNaN("123ABC"); // true: Number("123ABC") is NaN
isNaN(""); // false: the empty string is converted to 0 which is not NaN
isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN
// Dates
isNaN(new Date()); // false; Date objects can be converted to a number (timestamp)
isNaN(new Date().toString()); // true; the string representation of a Date object cannot be parsed as a number
// Arrays
isNaN([]); // false; the primitive representation is "", which coverts to the number 0
isNaN([1]); // false; the primitive representation is "1"
isNaN([1, 2]); // true; the primitive representation is "1,2", which cannot be parsed as number
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-isnan-number |
浏览器兼容性
加载中…