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;
  };
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值