BigInt 类型
BigInt 是在 JavaScript 中引入的一种新的数字类型,它提供了对任意精度整数的支持。
let x = BigInt(999999999999999);
let type = typeof x;
// The JavaScript `typeof` a `BigInt` is "bigint":在之前的 JavaScript 版本中,Number 类型只能安全地表示和操作 -(2^53 - 1) 和 2^53 - 1 之间的整数(即 Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER)。这是因为 Number 类型是根据 IEEE 754 双精度浮点数标准来实现的,而 BigInt 允许你去表示任意大的整数,不受 Number 的限制。
创建 BigInt
- 通过在整数末尾添加
n来直接为字面量创建一个 BigInt。 - 使用
BigInt()构造函数从字符串、数字或其他 BigInt 中创建一个新的 BigInt。
示例:
const bigIntLiteral = 1234567890123456789012345678901234567890n;
const bigIntFromNumber = BigInt(10); // 等同于 10n
const bigIntFromString = BigInt("1234567890123456789012345678901234567890");操作
BigInt 可以使用像普通整数一样的数学运算符进行加、减、乘、除(注意,除法结果会向零取整),以及取模。然而,请注意,BigInt 类型不能与传统的 Number 类型混合运算,试图将 BigInt 和 Number 直接在表达式中混合使用将会抛出一个错误。如果需要混合这两种类型,需先进行显式转换。
示例:
const bigInt1 = 100n;
const bigInt2 = 200n;
console.log(bigInt1 + bigInt2); // 输出:300n
console.log(bigInt1 * bigInt2); // 输出:20000n
// 抛出 TypeError,不能将 BigInt 和 Number 直接混合运算
// console.log(bigInt1 + 10);
// let y = x / 2; ERROR
// 正确的混合类型运算方式
console.log(bigInt1 + BigInt(10)); // 输出:110n进制数
BigInt 也可以用十六进制、八进制或二进制表示法编写(in hexadecimal, octal, or binary notation):
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;比较操作
BigInt 可以用于比较操作,并且可以与 Number 类型进行比较,这是因为比较操作不像算术运算那样有可能溢出。
示例:
console.log(10n === BigInt(10)); // 输出:true
console.log(10n < 20); // 输出:true
console.log(10n > 20); // 输出:false注意
虽然 BigInt 能提供超出 Number 安全整数范围的精确值,但它可能不适用于所有 JavaScript 环境,因为它还是相对较新的特性。在使用 BigInt 前,你应该检查目标环境是否支持此特性,尤其是在旧版浏览器或者某些 JavaScript 引擎中。
此外,由于 BigInt 可以存储非常大的数,因此在执行算术运算时可能会比普通的 Number 类型慢,尤其是当操作的数字非常大时。
总的来说,BigInt 为那些需要处理大整数的场景提供了解决方案,并使 JavaScript 的编程能力更进一步。