在 JavaScript 中,数字的运算是非常常见的操作。然而,由于 JavaScript 对数字的处理机制,会导致在进行大数运算时出现精度丢失的问题。例如,下面这个简单的例子:
console.log(9999999999999999 + 1); // 输出 10000000000000000
这个例子中,我们本来期望得到的结果是 10000000000000000
,但是输出却是 10000000000000001
。这是因为 JavaScript 在处理数字时,会将其转换为 64 位的浮点数进行计算,而在这个范围内,它无法精确地表示这个数字。
为了解决这个问题,ECMAScript 2019 引入了一个新的基本数据类型 BigInt,用于表示任意精度的整数。BigInt 可以处理比 JavaScript Number 类型更大的整数,从而避免了精度丢失的问题。
如何使用 BigInt
使用 BigInt 非常简单,只需要在数字后面添加一个 n
即可。例如:
const bigNum = 9999999999999999n; console.log(bigNum + 1n); // 输出 10000000000000000n
需要注意的是,BigInt 和 Number 是两个不同的数据类型,不能直接进行混合运算。如果需要进行运算,必须先将 Number 转换为 BigInt,例如:
const num = 12345678901234567890; const bigNum = BigInt(num); console.log(bigNum + 1n); // 输出 12345678901234567891n
除了可以直接使用 n
后缀来创建 BigInt,还可以使用 BigInt()
函数,将其他类型的数据转换为 BigInt。例如:
console.log(BigInt(12345678901234567890)); // 输出 12345678901234567890n console.log(BigInt('12345678901234567890')); // 输出 12345678901234567890n
BigInt 的运算
BigInt 支持基本的算术运算,包括加减乘除、余数和幂等运算。这些运算与 Number 的运算类似,只是需要使用 BigInt 类型的操作符。
// javascriptcn.com 代码示例 const a = 12345678901234567890n; const b = 98765432109876543210n; console.log(a + b); // 输出 111111111111111111100n console.log(a - b); // 输出 -86419753208641975320n console.log(a * b); // 输出 12193263113702179578905152678966464300n console.log(a / b); // 输出 0n console.log(a % b); // 输出 12345678901234567890n console.log(a ** b); // 输出 Infinity
需要注意的是,BigInt 与 Number 不同,不支持自增和自减运算符 ++
和 --
。
BigInt 的比较
BigInt 也支持比较运算符,包括小于、大于、等于、不等于、小于等于和大于等于。这些运算符的使用方法与 Number 类型相同。
// javascriptcn.com 代码示例 const a = 12345678901234567890n; const b = 98765432109876543210n; console.log(a < b); // 输出 true console.log(a > b); // 输出 false console.log(a == b); // 输出 false console.log(a != b); // 输出 true console.log(a <= b); // 输出 true console.log(a >= b); // 输出 false
需要注意的是,BigInt 与 Number 类型不同,不能直接进行比较运算,必须使用 BigInt 类型的操作符。
总结
ECMAScript 2019 中新增了 BigInt 数据类型,用于处理任意精度的整数运算。与 Number 类型不同,BigInt 能够处理更大的整数,并且不会出现精度丢失的问题。使用 BigInt 非常简单,只需要在数字后面添加 n
后缀即可。BigInt 支持基本的算术和比较运算,包括加减乘除、余数和幂等运算,以及小于、大于、等于、不等于、小于等于和大于等于等比较运算符。在进行运算时,需要注意 BigInt 与 Number 类型的区别,不能直接进行混合运算。
参考链接
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65782921d2f5e1655d20c015