在 ES11 中新增的 BigInt 类型,能够表示任意精度的整型数据。在 JavaScript 中,数值是使用 IEEE 754 浮点数标准进行存储的,因此只能表示 53 位的整数。BigInt 数据类型可以表示更大的整数数据。本文将对 BigInt 数据类型进行详细解析,并提供示例代码和学习指导。
BigInt 数据类型的定义
BigInt 数据类型是 ES11 引入的一种新的原始数据类型,可以用来表示任意长度的整数。BigInt 类型是一个新的 Number 类型,但是与 Number 类型是两个不同的类型。BigInt 类型的值可以比 Number 类型的范围更大。BigInt 类型的字面量以 n 结尾。
BigInt 的定义语法如下:
const bigInt = 9007199254740993n;
上述代码会生成一个 BigInt 对象,类型为 BigInt,数值为 9007199254740993。
BigInt 数据类型的范围
在 64 位浮点数的 JavaScript 引擎中,最大安全整数是 2^53-1,约等于 9 * 10^15。可以通过 Number.MAX_SAFE_INTEGER 常量获取到该值。BigInt 类型的值可以比 Number 类型的范围更大,可以通过 BigInt.asUintN() 和 BigInt.asIntN() 方法获取 BigInt 类型允许的最大范围。
BigInt 与 Number 范围的比较如下:
console.log(Number.MAX_SAFE_INTEGER); // 输出 9007199254740991 console.log(BigInt(Number.MAX_SAFE_INTEGER)); // 输出 9007199254740991n console.log(BigInt(Number.MAX_SAFE_INTEGER + 1)); // 输出 9007199254740992n console.log(BigInt.asUintN(64, -1)); // 输出 18446744073709551615n console.log(BigInt.asUintN(64, '0xffffffff')); // 输出 4294967295n
BigInt 的运算
使用 BigInt 进行运算的时候,需要使用 BigInt 类型的方法进行运算。常用的 BigInt 运算包括加法、减法、乘法和取余等。
示例代码如下:
const a = 10000n; const b = 20000n; console.log(a + b); // 输出 30000n console.log(a - b); // 输出 -10000n console.log(a * b); // 输出 200000000n console.log(a % b); // 输出 10000n
BigInt 的比较
使用 BigInt 进行比较的时候,需要使用 BigInt 类型的方法进行比较。常用的 BigInt 比较包括相等、大于和小于等。
示例代码如下:
const a = 10000n; const b = 20000n; console.log(a > b); // 输出 false console.log(a < b); // 输出 true console.log(a === b); // 输出 false
BigInt 的类型转换
将 BigInt 类型的数据转换为 Number 类型的数据,需要使用 Number() 方法进行转换。但是在 BigInt 超出了 Number 的最大范围时,转换时会出现精度问题。
示例代码如下:
const maxSafeInt = BigInt(Number.MAX_SAFE_INTEGER); console.log(Number(maxSafeInt)); // 输出 9007199254740991 console.log(Number(maxSafeInt + 1n)); // 输出 9007199254740992 console.log(Number(2n ** 64n - 1n)); // 输出 1.8446744073709552e+19
BigInt 的应用
BigInt 类型的应用场景比较广泛,特别是在数字安全和密码学领域。BigInt 数据类型可以用来处理密码散列、公钥密码和数字签名等操作。
示例代码如下:
// 加密数据 const data = '7546798243'; const encryptedData = BigInt.asUintN(64, data * Math.PI / 2); console.log(encryptedData); // 输出 5183325562n // 解密数据 const decryptedData = encryptedData * Math.PI / 2; console.log(decryptedData); // 输出 7546798243
结论
ES11 新特性 BigInt 类型的引入,可以让 JavaScript 处理超过 64 位的整型数据,对于数字安全、密码学等领域有着广泛的应用。在使用 BigInt 数据类型时,需要注意 BigInt 类型与 Number 类型的不同之处,需要使用 BigInt 类型的方法进行运算和比较操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6714a3b2ad1e889fe214c646