Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. JavaScript 标准内置对象
  5. isNaN()

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

isNaN()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

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

语法

js
isNaN(value)

参数

value

要被检测的值。

返回值

如果给定值在被转换为数字后NaN 则返回值为true;否则为false

描述

isNaN() 是全局对象的一个函数属性。

对于数字值,isNaN() 检测该值是否为NaN 值。当isNaN() 函数的参数不是数字类型时,其会首先被转换为数字,然后将其结果值与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

js
isNaN(NaN); // trueisNaN(undefined); // trueisNaN({}); // trueisNaN(true); // falseisNaN(null); // falseisNaN(37); // false// 字符串isNaN("37"); // false:可以被转换成数字 37,不是 NaNisNaN("37.37"); // false:可以被转换成数字 37.37,不是 NaNisNaN("37,5"); // trueisNaN("123ABC"); // true:Number("123ABC") 的结果是 NaNisNaN(""); // false:空字符串被转换成 0,不是 NaNisNaN(" "); // false:由空格组成的字符串被转换成 0,不是 NaN// 日期isNaN(new Date()); // false;Date 对象可以转换为数字(时间戳)isNaN(new Date().toString()); // true;Date 对象的字符串表示形式不能解析为数字

规范

Specification
ECMAScript® 2026 Language Specification
# sec-isnan-number

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp