ES2020 新特性:如何使用 BigInt 进行数字运算

在 JavaScript 中,数字类型是基本数据类型之一,但是在进行大整数运算时,会存在精度不够的问题。为了解决这一问题,ES2020 引入了 BigInt 类型,可以支持任意精度的整数运算。本文将介绍如何使用 BigInt 进行数字运算。

BigInt 的基本使用

BigInt 类型是在 JavaScript 中新增的一种类型,用于表示任意精度的整数。与 Number 类型不同,BigInt 类型可以表示比 Number 类型更大的整数,例如:

const max = Number.MAX_SAFE_INTEGER;
console.log(max + 1); // 9007199254740992
console.log(max + 2); // 9007199254740992
console.log(BigInt(max) + 1n); // 9007199254740993n
console.log(BigInt(max) + 2n); // 9007199254740994n

在上面的代码中,Number.MAX_SAFE_INTEGER 是 JavaScript 中能够精确表示的最大整数,它的值为 9007199254740991,当我们对它进行加 1 或者加 2 操作时,由于 Number 类型的精度限制,其结果不再是正确的值。而使用 BigInt 类型,则可以正常得到正确的结果。

BigInt 类型的字面量表示方式为在整数后面添加 n,例如 1234n 表示 BigInt 类型的整数 1234。

BigInt 的运算操作

BigInt 类型支持与 Number 类型的运算,但是不能与其他类型进行运算。在 BigInt 类型中,支持的运算操作包括:

  • 加法:+
  • 减法:-
  • 乘法:*
  • 除法:/
  • 模运算:%
  • 指数运算:**
  • 比较运算:<<=>>===!====!==

例如,我们可以使用 BigInt 类型进行如下运算:

const a = 123456789012345678901234567890n;
const b = 987654321098765432109876543210n;

console.log(a + b); // 1111111111111111111111111111111n
console.log(a - b); // -864197532086419753208641975320n
console.log(a * b); // 12193263113702179596958090406153377807762932853351701535704615434100n
console.log(a / b); // 0n
console.log(a % b); // 123456789012345678901234567890n
console.log(a ** 2n); // 15241578780673678546105778281054720515622620750190521n
console.log(a < b); // false
console.log(a > b); // true
console.log(a == b); // false
console.log(a != b); // true

BigInt 的注意事项

在使用 BigInt 类型时,需要注意以下几点:

  1. BigInt 类型不能与其他类型进行运算,需要显式地将其他类型转换为 BigInt 类型才能进行运算。
  2. BigInt 类型的字面量表示方式为在整数后面添加 n,例如 1234n 表示 BigInt 类型的整数 1234。
  3. 在进行运算时,需要使用 BigInt 类型的运算符,例如 +-*/%**<<=>>===!====!==
  4. BigInt 类型的变量可以使用普通的变量赋值方式进行赋值,例如 const a = 1234n;
  5. BigInt 类型的变量可以使用普通的变量名进行操作,例如 a + ba++ 等。
  6. BigInt 类型的变量不能使用 Math 对象中的方法,例如 Math.abs()Math.floor() 等。

示例代码

以下是使用 BigInt 进行数字运算的示例代码:

// 加法
const a = 123456789012345678901234567890n;
const b = 987654321098765432109876543210n;
const c = a + b;
console.log(c); // 1111111111111111111111111111111n

// 减法
const d = a - b;
console.log(d); // -864197532086419753208641975320n

// 乘法
const e = a * b;
console.log(e); // 12193263113702179596958090406153377807762932853351701535704615434100n

// 除法
const f = a / b;
console.log(f); // 0n

// 模运算
const g = a % b;
console.log(g); // 123456789012345678901234567890n

// 指数运算
const h = a ** 2n;
console.log(h); // 15241578780673678546105778281054720515622620750190521n

// 比较运算
const i = a < b;
console.log(i); // false

const j = a > b;
console.log(j); // true

const k = a == b;
console.log(k); // false

const l = a != b;
console.log(l); // true

总结

ES2020 引入了 BigInt 类型,可以支持任意精度的整数运算。在进行数字运算时,如果存在精度不够的问题,可以考虑使用 BigInt 类型来解决。在使用 BigInt 类型时,需要注意其基本使用方法和注意事项。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c5d633add4f0e0ff05e6d6