在日常的前端开发中,我们经常需要处理数字计算,但是 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 还支持位运算符(按位与、按位或等)。下面是一些示例代码:
// javascriptcn.com code example const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; console.log(a + b); // 11111111111111111111111111111111111111100n console.log(a - b); // -8641975320864197532098765432108641975320n console.log(a * b); // 12193263113702179520349598213761842272375671371948512808503203384520768096804100n console.log(a / b); // 0n console.log(a % b); // 1234567890123456789012345678901234567890n console.log(a & b); // 1234566890933208221300014886057648272896n console.log(a | b); // 9882431653011089137861359311269145906686n
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