ES10 中新技术 BigInt 的介绍和使用方法

在现代化的软件开发中,数字计算常常是不可或缺的。然而,由于 JavaScript 的数据类型限制,许多数字运算通常会失去精度或提示错误。ES10 中引入了 BigInt 这一新技术,为开发人员提供了更为精准、可靠的数字计算方式。本文将重点介绍 BigInt 的概念、应用范围以及使用方法。

BigInt 的概念

BigInt 是指一种新类型的 JavaScript 数据类型,表示大整数,采用的是二进制补码表示法。这种数据类型的产生,是为了解决 JavaScript 标准中 Number 类型的精度问题,因为 JavaScript 中的 Number 类型是采用 IEEE 754 浮点数标准来存储的,只能精确地表示 64 位以内的整数。

BigInt 支持任意长度的整数运算,可以存储整数的最大值为 253 - 1,其大小仅受计算机内存的限制。BigInt 类型的数值后缀为 n 或 N。

BigInt 的应用

BigInt 类型广泛应用于需要进行高精度运算的场景,比如密码学、编译器、数据存储等领域。以下是一些 BigInt 的应用场景:

  1. RSA 加密算法
  2. 数字签名
  3. 随机性测试
  4. 整数分解
  5. 密码学运算

BigInt 的使用方法

BigInt 既可以通过构造函数创建实例,也可以通过字面量形式表示。具体的使用方法如下所示:

  1. 创建 BigInt 实例
const num1 = 123456789123456789n;
const num2 = BigInt("9007199254740991");
console.log(num1); // 123456789123456789n
console.log(num2); // 9007199254740991n
  1. 普通数字与 BigInt 相互转换

BigInt 与普通数字之间的转换,需要使用 Number() 方法或 toString() 方法。

const bigIntNum = 9007199254740991n;
const normalNum = Number(bigIntNum);
console.log(normalNum); // 9007199254740991
console.log(typeof normalNum); // "number"

const newBigIntNum = BigInt(normalNum);
console.log(newBigIntNum); // 9007199254740991n
console.log(typeof newBigIntNum); // "bigint"
  1. BigInt 对象的运算操作

BigInt 对象可以进行加、减、乘、除等数学运算操作。BigInt 对象使用的是同名操作符进行数学运算。BigInt 对象和普通数字的运算结果也是 BigInt 类型。

const num1 = 9007199254740991n;
const num2 = 123456789123456789n;

const add = num1 + num2;
const sub = num2 - num1;
const mul = num1 * num2;
const div = num2 / num1;

console.log(add); // 123465896323011880n
console.log(sub); // 123447691924911898n
console.log(mul); // 11178940682180949091357240271n
console.log(div); // 137322736n
  1. BigInt 比较操作

BigInt 类型之间比较大小,使用的是大于、小于、等于等操作符进行比较。

const num1 = 123456789123456789n;
const num2 = 999999999999999999n;

console.log(num1 > num2); // false
console.log(num1 < num2); // true
console.log(num1 === num2); // false
  1. BigInt 的运算方法

除了使用操作符进行运算操作,BigInt 类型还提供了多个预定义的运算方法,比如 exp()、mod() 等。

const num1 = 123456789123456789n;
const num2 = 2n;

console.log(num1.exp(2n)); // 15241289347018463618593536481n
console.log(num1.mod(10n)); // 9n

总结

BigInt 提供了 JavaScript 一种全新的数字表示方式,解决了 JavaScript 中 Number 类型的精度限制,具有高精度、稳定性等特点。这种新的数据类型在密码学、编译器、数据存储等领域都有着广泛的应用,开发人员可以根据需要选择使用。在实际应用过程中,需要注意 BigInt 只能进行整数运算,同时也不能使用 BigInt 对象进行函数运算、字符串运算等其他数据类型的运算。

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


纠错反馈