ECMAScript 2020 新增了一个名为 BigInt 的数据类型,用来表示超过 JavaScript 支持的最大整数范围的整数。在本文中,我们将详细了解 BigInt 类型的使用、实现及注意事项。
什么是 BigInt?
JavaScript 中的 Number 数据类型可以表示的整数范围是 -2^53 到 2^53-1。当需要表示更大的整数时,通常使用字符串、数组或其他类似方式进行处理。但这种方式的问题在于,相比于原生的数字类型,它们的运算效率非常低。
为了解决这些问题,ECMAScript 2020 添加了一个名为 BigInt 的新数据类型。BigInt 类型可以表示任意大小的整数,超过了 Number 类型的整数范围限制。
如何使用 BigInt?
BigInt 类型通过在数字后添加 n 或使用 BigInt() 函数来创建。例如:
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt("1234567890123456789012345678901234567890");
我们还可以将 BigInt 类型的变量与其他 BigInt 类型的变量或 Number 类型的变量进行运算。在操作中,BigInt 会自动转换为 Number 类型,因此需要特别注意 BigInt 和 Number 共同运算时的精度问题。
以下示例演示了如何使用 BigInt 进行加减乘除运算:
const num1 = 1234567890123456789012345678901234567890n; const num2 = 9876543210987654321098765432109876543210n; const sum = num1 + num2; const difference = num2 - num1; const product = num1 * num2; const quotient = num2 / num1; console.log(sum); // 11111111101111111100111111111101111111100n console.log(difference); // 8641975320864197532086419753096419754320n console.log(product); // 121932631137021795418490501023073318922581123782565018516494888237287158408100n console.log(quotient); // 7990063826168887947579778532332042846n
需要注意的是,BigInt 运算得到的结果也是 BigInt 类型,需要显式地转换成 Number 类型才能进行比较。以下示例演示了如何将 BigInt 类型的变量转换成 Number 类型:
const num1 = 1234567890123456789012345678901234567890n; const num2 = BigInt(Number.MAX_SAFE_INTEGER); console.log(Number(num1)); // 1.2345678901234568e+39 console.log(Number(num2)); // 9007199254740991
注意事项
尽管 BigInt 类型的可表示范围很大,但它在一些操作中无法与 Number 类型互换使用。如下面的操作会抛出 TypeError 异常:
const num1 = 123n; const num2 = 456; console.log(num1 + num2); // TypeError: Cannot mix BigInt and other types, use explicit conversions
当需要将 BigInt 转换成其他类型时,需要特别注意精度的问题。在过大或过小的数字范围内,BigInt 与 Number 的精度差异会导致转换结果不准确。以下示例演示了这个问题:
const bigInt1 = 9007199254740992n; // 2 ** 53 const bigInt2 = 9007199254740992n; const sum = Number(bigInt1 + bigInt2); console.log(bigInt1 + bigInt2); // 18014398509481984n console.log(sum); // 9007199254740992
总结
BigInt 类型是 ECMAScript 2020 中新增的一个数据类型,用于表示超过 JavaScript 支持的最大整数范围的整数。使用 BigInt 类型时需要注意数据类型转换的问题。在需要处理超过 Number 数据类型范围的整数时,BigInt 类型将会是非常实用的工具。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65929258eb4cecbf2d753fa8