在 JavaScript 中,数字类型默认是双精度浮点型,即 number
类型。这意味着 JavaScript 可以处理的数字范围为 $-2^{53}+1$ 到 $2^{53}-1$。如果想要进行更大的数值计算,之前的解决方案是使用第三方库或将数字拆分成多个较小的部分进行计算。但从 ES11 开始,JavaScript 开始原生支持处理大整数,这就是 BigInt。
什么是 BigInt?
BigInt 是一种新的原生类型,用于表示整数。它可以表示比 Number
更大、更长的整数($2^{53}-1$)。并且 BigInt 不会出现精度损失的问题。
BigInt 类型的变量使用 n
后缀表示,例如 12345678901234567890n
。
BigInt 的基本操作
BigInt 支持大多数与 Number
相关的操作,但使用方法有所不同。以下是一些例子:
BigInt 的创建
const myBigInt = 12345678901234567890n; const anotherBigInt = BigInt('12345678901234567890');
BigInt 的算术操作
const a = 123n; const b = 456n; console.log(a + b); // 579n console.log(a - b); // -333n console.log(a * b); // 56088n console.log(a / b); // 0n
BigInt 的比较操作
-- -------------------- ---- ------- ----- - - ----- ----- - - ----- ------------- -- --- -- ----- ------------- -- --- -- ---- ------------- - --- -- ---- ------------- - --- -- ----- ------------- -- --- -- ---- ------------- -- --- -- -----
BigInt 的限制和注意事项
如果你试图将 BigInt
类型的值与 Number
类型的值相加,会抛出一个 TypeError
异常。因为 BigInt 和 Number 是两个不同的类型。如果需要相加,需要将 Number
类型的值转换为 BigInt
类型。
const myBigInt = 12345678901234567890n; const myNumber = 123; console.log(myBigInt + BigInt(myNumber)); // 12345678901234568013n
如果尝试在 BigInt
中使用小数,它会被截断成整数。例如,1.2n
将被截断为 1n
。
在 BigInt
内部计算时,位运算操作符(如 <<
、>>
、>>>
)被禁用。这是因为位运算操作符只能用于 Number
类型的值。另外,无法对 BigInt
变量使用递增/递减运算符(++
和 --
)。
不同类型之间的转换
BigInt
类型支持从 Number
、Boolean
、String
和 BigInt
转换。下面是一些例子:
从 Number 转换
const myBigInt = BigInt(Number.MAX_SAFE_INTEGER);
从 Boolean 转换
const myBigInt = BigInt(true); // 1n const myBigInt = BigInt(false); // 0n
从 String 转换
const myBigInt = BigInt('12345678901234567890');
从 BigInt 转换
const myBigInt = BigInt('12345678901234567890'); const myOtherBigInt = BigInt(myBigInt);
BigInt 的应用案例
BigInt
在日常开发中很少用到,但对于一些特殊的场景来说,它是必须的。以下是一些可能用到 BigInt
的案例:
- 数字签名
- 网络协议处理
- 加密
- 大数据分析
总结
BigInt
是一个新的原生类型,用于解决 JavaScript 中数字范围限制的问题。它可以表示比 Number
更大、更长的整数,并且不会出现精度损失的问题。尽管使用范围和实际应用有限,但在特定场景下,它是必不可少的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b6fc70add4f0e0fff9963d