随着互联网的发展,数据量越来越大,超大整数的操作也越来越常见。在 JavaScript 中,我们通常使用 Number 类型来表示数字,但是 Number 类型有一个限制,即不能表示超过 2^53-1 的整数。为了解决这个问题,ES11 引入了 BigInt 类型,它可以表示任意大的整数,让超大整数操作更加便利。
BigInt 类型的定义
BigInt 类型是一种全新的数据类型,它可以表示任意大的整数,不受 Number 类型的限制。在 JavaScript 中,我们可以使用 BigInt() 函数来创建 BigInt 类型的值。例如:
const a = BigInt(12345678901234567890); const b = BigInt("123456789012345678901234567890");
BigInt() 函数可以接受一个数字或字符串作为参数,返回一个 BigInt 类型的值。
BigInt 类型和 Number 类型的比较
BigInt 类型和 Number 类型虽然都可以表示整数,但是它们之间有一些差异。首先,BigInt 类型的值必须以 n 结尾,例如:
const a = BigInt(12345678901234567890n);
其次,在进行运算时,BigInt 类型和 Number 类型不能直接混用,必须进行类型转换。例如:
const a = BigInt(12345678901234567890n); const b = 12345678901234567890; // 将 Number 转换为 BigInt const c = BigInt(b); // 将 BigInt 转换为 Number const d = Number(a);
在进行运算时,BigInt 类型和 Number 类型的结果也不同。例如:
const a = 12345678901234567890; const b = BigInt(12345678901234567890n); console.log(a + 1); // 12345678901234567891 console.log(b + 1n); // 12345678901234567891n
从上面的例子可以看出,BigInt 类型的运算结果也是 BigInt 类型,需要以 n 结尾。
BigInt 类型的运算
BigInt 类型支持常见的数学运算,例如加减乘除、取模和幂运算等。这些运算符和 Number 类型的运算符相同,只不过需要以 n 结尾。例如:
// javascriptcn.com 代码示例 const a = BigInt(12345678901234567890n); const b = BigInt(98765432109876543210n); console.log(a + b); // 111111111111111111100n console.log(a - b); // -86419753208641975320n console.log(a * b); // 12193263113702179594968586590402103400n console.log(a / b); // 0n console.log(a % b); // 12345678901234567890n console.log(a ** b); // Infinity
需要注意的是,BigInt 类型的除法运算只能得到整数部分,不能得到小数部分。例如:
const a = BigInt(12345678901234567890n); const b = BigInt(98765432109876543210n); console.log(a / b); // 0n
BigInt 类型的比较运算
BigInt 类型支持常见的比较运算,例如大于、小于、等于、大于等于和小于等于等。这些运算符和 Number 类型的运算符相同,只不过需要以 n 结尾。例如:
const a = BigInt(12345678901234567890n); const b = BigInt(98765432109876543210n); console.log(a > b); // false console.log(a < b); // true console.log(a == b); // false console.log(a >= b); // false console.log(a <= b); // true
BigInt 类型的应用场景
BigInt 类型适用于超大整数的操作,例如加密算法、哈希算法、位运算等。在日常的开发中,我们可能用不到 BigInt 类型,但是在一些特殊的场景中,它是非常有用的。
总结
ES11 引入了 BigInt 类型,它可以表示任意大的整数,解决了 Number 类型无法表示超大整数的问题。BigInt 类型和 Number 类型的比较、运算和转换都需要注意一些细节,但是掌握了这些细节,就可以更加便利地操作超大整数。在实际的开发中,需要根据具体的场景选择合适的数据类型,才能发挥它们的最大作用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650e500195b1f8cacd787292