ES11-BigInt类型
2022-04-19 本文已影响0人
hunter97
我们在使用js进行一下大数计算的时候,由于精度限制,会带来计算结果不准确的问题,如:
const max = Number.MAX_SAFE_INTEGER;
for (let i = 0; i < 10; i++) {
console.log(`${max} + ${i} = ${max + i}`)
}

我们可以发现当数据达到一定范围以后,js的计算结果就不在正确,这时候我们就可以通过
ES11
的BigInt
类型来解决这一问题。什么是
BigInt
?BigInt
是JavaScript中一种可以用来表示任意精度整数的基本数据类型。使用如下:
const max = Number.MAX_SAFE_INTEGER;
for (let i = 0; i < 10; i++) {
console.log(BigInt(max))
console.log(BigInt(i))
console.log(BigInt(max) + BigInt(i))
console.log(`${BigInt(max)} + ${BigInt(i)} = ${BigInt(max) + BigInt(i)}`)
}

由上我们可以看到计算结果已经恢复准确。
使用
BigInt
有以下几个注意事项:
1.生成一个BigInt
类型的值只需要在任意整数后加上n做后缀即可;
2.BigInt
是JavaScript
中新的的基础类型,所以可以用typeof
操作符去检测;
3.当强制类型转化为布尔值时(例如在使用if,&&,||
或者Boolean(int)
时触发),BigInt
遵循和Numebr
一样的规则;
4.BigInt
支持那些常见的运算符例如:+,-,*,/ ** %
,包括一些按位运算符如|, & , <<, >> ^
,BigInt
和Number
类型值的表现一致;
5.不要混合操作BigInt
类型和Number
类型,因为任何隐式强制类型转化都会导致精度丢失;
兼容性
人生如白驹过隙死不足恨但夙心往志,不闻于末世矣。