JavaScript 使用isNaN()测试NaN

示例

window.isNaN()

全局函数isNaN()可用于检查某个值或表达式的计算结果是否为NaN。该函数(简而言之)首先检查该值是否为数字,如果未尝试将其转换为(*),然后检查结果值是否为NaN。因此,此测试方法可能会造成混乱

(*)“转换”方法不是那么简单,有关算法的详细说明,请参阅ECMA-262 18.2.3。

这些示例将帮助您更好地了解isNaN()行为:

isNaN(NaN);          // 真正
isNaN(1);            // 假:1是数字
isNaN(-2e-4);        // 假:-2e-4是科学计数形式的数字(-0.0002)
isNaN(Infinity);     // 假:无穷大是数字
isNaN(true);         // 假:转换为1,即数字
isNaN(false);        // 假:转换为0,即一个数字
isNaN(null);         // 假:转换为0,即一个数字
isNaN("");           // 假:转换为0,即一个数字
isNaN(" ");          // 假:转换为0,即一个数字
isNaN("45.3");       // 假:表示数字的字符串,转换为45.3
isNaN("1.2e3");      // 假:表示数字的字符串,转换为1.2e3
isNaN("Infinity");   // 假:表示数字的字符串,转换为Infinity
isNaN(new Date);     // 假:日期对象,自历元以来转换为毫秒
isNaN("10$");        // 真正 : conversion fails, the dollar sign is not a digit
isNaN("hello");      // 真正 : conversion fails, no digits at all
isNaN(undefined);    // 真正 : converted to NaN
isNaN();             // 真正 : converted to NaN (implicitly undefined)
isNaN(function(){}); // 真正 : conversion fails
isNaN({});           // 真正 : conversion fails
isNaN([1, 2]);       // 真正 : converted to "1, 2", which can't be converted to a number

最后一个有点棘手:检查anArray是否为NaN。为此,Number()构造函数首先将数组转换为字符串,然后转换为数字。这就是为什么原因isNaN([])和isNaN([34])两回false,但isNaN([1, 2])和isNaN([true])这两个回报true:因为他们可以转化为"","34","1,2"和"true"分别。通常,除非考虑NaN到数组isNaN()仅包含一个可以将其字符串表示形式转换为有效number的元素,否则它将被视为

6

Number.isNaN()

在ECMAScript 6中,主要实现了该功能,以避免强制将参数转换为数字的问题。,的确不会在测试之前尝试将转换为数字。这也意味着返回类型为number的值(基本上就是)。Number.isNaN()window.isNaN()Number.isNaN()NaNtrueNumber.isNaN(NaN)

从ECMA-262 20.1.2.4:

当Number.isNaN使用一个参数调用时number,将执行以下步骤:

  1. 如果Type(number)不是Number,则返回false。

  2. 如果为数字NaN,则返回true。

  3. 否则,返回false。

一些例子:

// 唯一的 
Number.isNaN(NaN);          // 真正

// 号码
Number.isNaN(1);            // 假
Number.isNaN(-2e-4);        // 假
Number.isNaN(Infinity);     // 假

// 非类型编号的值
Number.isNaN(true);         // 假
Number.isNaN(false);        // 假
Number.isNaN(null);         // 假
Number.isNaN("");           // 假
Number.isNaN(" ");          // 假
Number.isNaN("45.3");       // 假
Number.isNaN("1.2e3");      // 假
Number.isNaN("Infinity");   // 假
Number.isNaN(new Date);     // 假
Number.isNaN("10$");        // 假
Number.isNaN("hello");      // 假
Number.isNaN(undefined);    // 假
Number.isNaN();             // 假
Number.isNaN(function(){}); // 假
Number.isNaN({});           // 假
Number.isNaN([]);           // 假
Number.isNaN([1]);          // 假
Number.isNaN([1, 2]);       // 假
Number.isNaN([true]);       // 假