Number.isNaN 与 isNaN 的区别

JavaScript 中,value一共有七种type
null,undefined,boolean,number,string,object,symbol(ES6新增),以下为isNaN与Number.isNaN的输出结果:

//isNaN
console.log(isNaN(null));            //false
console.log(isNaN(true));            //false
console.log(isNaN(false));           //false
console.log(isNaN(0));               //false
console.log(isNaN(undefined));       //true
console.log(isNaN("AB"));            //true
console.log(isNaN({a: 1}));          //true
console.log(isNaN(NaN));             //true

//Number.isNaN
console.log(Number.isNaN(null));      //false
console.log(Number.isNaN(true));      //false
console.log(Number.isNaN(false));     //false
console.log(Number.isNaN(0));         //false
console.log(Number.isNaN(undefined)); //false
console.log(Number.isNaN("AB"));      //false
console.log(Number.isNaN({a: 1}));    //false
console.log(Number.isNaN(NaN));       //true

console.log(typeof NaN); //number
console.log(NaN == NaN); //false 为什么?
NaN MDN: The global NaN property is a value representing Not-A-Number.
意思是是说:NaN是一个放在 global(浏览器里是window)对象里的一个value,是一个代表Not-A-Number的value.
所以NaN是一个 value, 这个 value 的 type 是 number。

解释来自JavaScript权威指:value, type, variable 
值value:就是计算机运行时操作的一些数据对象
数据类型type:就是计算机表示并能操作的值的类型
变量variable:一个值的符号名称,当程序需要将值保存起来备用时,就将值赋给一个变量

即:
variable是存放value的容器,而value是有type概念的,容器variable是没有type的概念的。
example:var ynqc = 'Ella'; 容器 variable ynqc 装着 value 'Ella', value 'Ella' 的type是string

所以,我们用isNaN()来判断一个value是不是NaN了。但是:

isNaN("AB");      // true
isNaN(undefined); // true
isNaN({});        // true

很明显不是 NaN 的 value 也被误判成 NaN 了。

于是 ES6 为了弥补这一BUG引入了 Number.isNaN().

Number.isNaN(NaN);         // true
Number.isNaN("AB");        // false
Number.isNaN(undefined);   // false
Number.isNaN({}); 	 // false

Number.isNaN() 的 polyfill

if (!Number.isNaN) {
  Number.isNaN = function(n) {
    return typeof n === "number" && window.isNaN( n );
  };
}
简单的实现,利用只有 NaN 不跟自己相等的特性
if (!Number.isNaN) {
  Number.isNaN = function(n) {
    return  return value !== value;
  };
}

猜你喜欢

转载自blog.csdn.net/qq_33495944/article/details/84860760
今日推荐