isNaN()

基线 广泛可用

此功能已建立良好,并在许多设备和浏览器版本上运行。它自以下日期起在所有浏览器中可用。 2015 年 7 月.

**isNaN()** 函数确定一个值是否为 NaN,必要时先将值转换为数字。因为 isNaN() 函数内部的强制转换可能会 令人惊讶,您可能更愿意使用 Number.isNaN()

试试看

语法

js
isNaN(value)

参数

value

要测试的值。

返回值

如果给定值为 NaN(在 转换为数字 后),则为 true;否则为 false

描述

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) 返回 truex 将被强制转换为 NaN,并且大多数算术表达式将返回 NaN(因为 NaN 会传播)。例如,您可以使用它来测试函数参数是否可以进行算术处理(类似于数字),并通过抛出错误、提供默认值等方式处理非数字类值。这样,您可以有一个函数利用 JavaScript 提供的全部功能,通过根据上下文隐式转换值来提供这种功能。

注意: + 运算符 执行数字加法和字符串连接。因此,即使 isNaN() 对两个操作数都返回 false+ 运算符仍可能返回字符串,因为它没有用作算术运算符。例如,isNaN("1") 返回 false,但 "1" + 1 返回 "11"。为了确保您正在处理数字,请 将值强制转换为数字 并使用 Number.isNaN() 测试结果。

示例

请注意,对于不是 NaN 值但也不是数字的值,isNaN() 如何返回 true

js
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 表仅在浏览器中加载

另请参阅