在日常的前端开发中,我们经常需要处理数字计算,但是 JavaScript 中最大的整数是 2^53 - 1,如果超出这个范围,就会出现精度丢失等问题。为了解决这个问题,ECMAScript 2021(也称为 ES12)引入了一个新的数值类型 BigInt,它可以用来存储任意大小的整数。
BigInt 简介
BigInt 是 ECMAScript 加入的一个新的原生数值类型。与 Number 不同,BigInt 可以表示非常大的整数,甚至可以表示超过 2 的 53 次方的整数,同时保持高精度和整型的特性。
创建 BigInt 数值
我们可以使用 n
后缀或者调用 BigInt()
函数来创建 BigInt 对象。下面是一些示例代码:
const bigIntNumber = 9007199254740991n; // or const bigIntNumber2 = BigInt("9007199254740991");
注意:当使用字面量时,需要在数字后面加上 n
来表示 BigInt 类型。
BigInt 运算
除了基本的加、减、乘、除等运算,BigInt 还支持位运算符(按位与、按位或等)。下面是一些示例代码:
-- -------------------- ---- ------- ----- - - ------------------------------------------ ----- - - ------------------------------------------ ------------- - --- -- ------------------------------------------ ------------- - --- -- ------------------------------------------ ------------- - --- -- --------------------------------------------------------------------------------- ------------- - --- -- -- ------------- - --- -- ----------------------------------------- ------------- - --- -- ----------------------------------------- ------------- - --- -- -----------------------------------------
BigInt 和 Number 的相互转换
为了充分利用 JavaScript 提供的 Number 功能,我们需要在 BigInt 和 Number 相互转换时注意一些事项。
将 BigInt 转换为 Number ,使用 Number()
即可:
const bigIntNumber = 9007199254740991n; const convertedNumber = Number(bigIntNumber); console.log(convertedNumber); // 9007199254740991
但是需要注意,BigInt 超过了 Number 所能表示的最大值时,将会丢失精度:
const bigIntNumber = 9999999999999999999999999999999999999999n; const convertedNumber = Number(bigIntNumber); console.log(convertedNumber); // 1e+40
将 Number 转换为 BigInt,则需要使用 BigInt()
函数:
const number = 123456789012345678901234567890; const bigIntNumber = BigInt(number); console.log(bigIntNumber); // 123456789012345678901234567890n
BigInt 的一些注意事项
在使用 BigInt 时,需要注意以下几点:
- 不能将 BigInt 值与 Number 值混合运算。
- 不能使用 BigInt 值作为对象属性名称。
- 不能在
for..in
循环中使用 BigInt。
结论
ES2021 中的新增功能 BigInt 提供了处理大数运算的能力,比较简单易用,适用于开发者处理大数计算场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672cfcefddd3a70eb6d99c18