js中的有趣的数字类型--无穷大和NaN

js中的有趣的数字类型--无穷大和NaN

背景:一次在计算数据累积涨跌幅和分天涨跌幅的时候,结果为Infinity和NaN的情况。Infinity是一个有趣的属性:它比任何有限数字都大。NaN也很有趣:它是数据类型但不是数字。那么我们就先从无穷大讲起

1.Infinity是什么

Infinity 属性用于存放表示正无穷大的数值。-Infinity 属性用于存放表示负无穷大的数值

提示:请使用 Number.isFinite(value)全局函数来判断一个值是否是 Infinity 值。

从这可知Infinity和-Infinity都属于number类型的特殊值:

typeof Infinity;  // => 'number'
typeof -Infinity; // => 'number'

2.有趣之Infinity

Infinity大于任何有限数字,还能进行算术运算

Infinity > 100;    // true
Infinity > Number.MAX_SAFE_INTEGER;  // true
Infinity > Number.MAX_VALUE;         // true

Infinity + 1;           // Infinity
Infinity + Infinity;    // Infinity

Infinity * 2;           // Infinity
Infinity * Infinity;    // Infinity

Infinity / 3;           // Infinity

任何有限数字除0,结果都是Infinity

20 / 0;  // => Infinity

任何有限数字除Infinity,结果都是0

20 / Infinity;  // => 0

而对Infinity的错误操作就会出现NaN

Infinity / Infinity;     // => NaN
Infinity % 20;           // => NaN

3.NaN是什么

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

提示:请使用 isNaN() 全局函数来判断一个值是否是 NaN 值。

var h = Number('hello world');   // => h是NaN

4.有趣之NaN

在布尔值中,它是false

var h = Number('hi');
if (h) {
    console.log('true');
} else {
    console.log('false');  // 输出false
}

自己和自己不想等

var x = Number('abc');
console.log(x == x, 'NaN');  // false

5.努力避坑

我们虽然不常使用Infinity值。 但是,知道何时会出现Infinity值还是必要的

  • 解析数据
parseFloat('10.5');   => 10.5
parseFloat('zzz);     => NaN

parseInt('11', 10);   => 11
parseInt(Infinity, 10);     => NaN
  • JSON序列化
const worker = {
 salary: Infinity
};

JSON.stringify(worker); // => '{ "salary": null }'
  • Math 函数

const numbers = [1, 2];
const empty = [];

Math.max(...numbers); // => 2
Math.max(...empty);   // => -Infinity

Math.min(...numbers); // => 1
Math.min(...empty);   // => Infinity

6.总结

Infinity和NaN都是特殊的数字值,但是NaN是唯一一个和自身不相等的值。

解析来自输入的数字时,必须小心Infinity:Number('Infinity'),parseFloat('Infinity')返回实际的Infinity。 当使用JSON.stringify()序列化时,Infinity变为null

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值