isNaN()
**isNaN()
** 函数确定一个值是否为 NaN
,必要时先将值转换为数字。因为 isNaN()
函数内部的强制转换可能会 令人惊讶,您可能更愿意使用 Number.isNaN()
。
试试看
语法
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()
测试结果。
示例
请注意,对于不是 NaN
值但也不是数字的值,isNaN()
如何返回 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 语言规范 # sec-isnan-number |
浏览器兼容性
BCD 表仅在浏览器中加载