前端学习之路 isNaN也是个bug?

NaN

全局属性NaN,一个不是数字的数字;可能比较难以理解,可以将其理解为“无效的数值”;


为什么说NaN是一个不是数字的数字?

typeof NaN === 'number'; // true复制代码

NaN用来表示失败的数学运算;

let a = 1 / 'foo';
console.log(a); // NaN
typeof a  === 'number'; // true复制代码


如何检测NaN?

  • NaN不等于自身,NaN是JavaScript中唯一一个不等于自身的值;

let a = NaN;
a == NaN; // false
a === NaN; // false复制代码

  • isNaN意外的问题;

let a = 2 / 'foo';
isNaN(a); // true
a = 'foo';
isNaN(a); // true => what复制代码

  • 非数字类型使用isNaN时,JavaScript会默认先将其转换为数字类型,再使用isNaN检验;

let a = '123';
isNaN(a); // Number(a) => 123 => isNaN(a) => false
a = 'hi';
isNaN(a); // Number(a) => NaN => isNaN(a) => true复制代码

  • 正确的方式(NaN是JavaScript中唯一一个不等于自身的值);

window.isNaN = function (n) {
    return n !== n;
}复制代码


转载于:https://juejin.im/post/5cdcfd75518825652b11d5a7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值