◆

JavaScript NaN 详解:含义与运算规则

2023-02-02 01:370

含义

NaN 是 JavaScript 的特殊值,表示“非数字”,主要出现在将字符串解析成数字出错的场合。

  • 全局属性 NaN 的值表示不是一个数字(Not-A-Number)。
  • NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样
  • NaN 做任务 + - * / 运算都等于其本身
  • NaN 不是独立的数据类型,而是一个特殊数值,它的数据类型依然属于 Number

运算规则

NaN 不等于任何值,包括它本身。

NaN === NaN; // false

数组的 indexOf 方法内部使用的是严格相等运算符,所以该方法对 NaN 不成立。

[NaN].indexOf(NaN); // -1

NaN 与任何数(包括它自己)的运算,得到的都是 NaN。

isNaN()

判断一个值是否为 NaN,该方法会强制将参数转换成数字。

等号运算符( == 和 === ) 不能被用来判断一个值是否是 NaN。必须使用 Number.isNaN() 或 isNaN() 函数。在执行自比较之中:NaN,也只有 NaN,比较之中不等于它自己。

isNaN 只对数值有效,如果传入其他值,会被先转成数值。

NaN == NaN; // false
Number.NaN == NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
isNaN('Hello'); // true
// 相当于
isNaN(Number('Hello')); // true
NaN != NaN; // true
typeof NaN; // "number"

Number.isNaN()

和全局函数 isNaN() 相比,该方法不会强制将参数转换成数字,只有在参数是真正的数字类型,且值为 NaN 的时候才会返回 true。

Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true

// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN('NaN'); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN('blabla'); // false

// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN('37');
Number.isNaN('37.37');
Number.isNaN('');
Number.isNaN(' ');
💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEJavaScript NaN 详解:含义与运算规则加载中