isNaN、Number.isNaN、lodash.isNaN 的区别

一、isNaN() 的作用

检查是否为 NaN 的值,是返回 true, 否则返回 false

二、什么是 NaN?

首先,我们应该先理解一下 NaN 是什么? 当算术运算返回一个未定义的或无法表示的值时,就用 NaN 表示, 例如: 0 / 0 = NaN (注:其它数除以0不会得到 NaN,例如 1 / 0 = Infinity); 或者将某些 不能强制转换为数值 的 非数值 转换为 数值 的时候,也会得到 NaN。例如:Number('y') = NaN

三、isNaN() 的必要性

在 javascript 中,值的比较方式可以通过 相等操作符(== 或 ===)来直接进行比较,但 NaN 不可以。在 javascript 中规定,NaN 自身永不等于自身。因此, NaN === NaNNaN == NaN 返回的结果都是 false。那么,isNaN 就很有必要性了。

四、isNaN() 比较

目前常见的 isNaN() 函数, 包括全局的 isNaN() 、 ECMAScript (ES2015) 提供的 Number.isNaN() 和 比较常用的插件 lodash 封装的 lodash.isNaN()。通过比较三种 isNaN() 的实现方式,对比他们各自的实现原理。

1. 全局的isNaN()

全局的 isNaN(value) 方法,在判断之前,会先通过类型转换 Number(value) 将 入参 value 强制转换为 number 类型,然后再判断其是否是 NaN 值。

// polyfill
var isNaN = function (value) {
   
   
  var n = Number(value);
  return n !== n;
};

// test
isNaN(null)  // false:Number(null) = 0 
isNaN(true)  // false: Number(true) = 1
isNaN(1)     // false:Number(1) = 1
isNaN('1')   // false: Number('1') = 1
isNaN(1+1)   // false: Number(1+1) = 2
isNaN(1/0)   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值