随着 JavaScript 的不断发展,开发者们对于性能和精度的需求也越来越高。在 ECMAScript 2020 (ES11) 中,增加了一种新的数据类型 BigInt,能够更方便地处理大整数,可谓是提高了 JavaScript 处理大数的能力。
BigInt 的定义
BigInt 是 ECMAScript 2020 中新出现的一种基本数据类型,也可以被称为任意精度整数。它可以表示超过 2^53 的极大整数。
在 JavaScript 中,使用 Number 类型时,数字的安全编码范围仅仅是从 -2^53 到 2^53。超过了这一个范围,Number 类型就无法准确表示它们,会导致精度问题。因此,针对这个问题,ES11 引入了 BigInt 类型。BigInt 类型能够表示任意大的整数,没有精度问题,不过也因此消耗了更多的空间和计算资源。
BigInt 的使用
声明 BigInt 类型
在声明一个 BigInt 的变量时,需要在数字字面量后添加一个 n(字母 N 的小写形式,即 n)。例如:
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt(9007199254740991)
需要注意的是,正常的数字字面量(不加 n)无法识别成 BigInt 类型。
运算符支持
操作 BigInt 类型与操作 Number 类型的操作符是有区别的。以下为 BigInt 的操作符支持:
- +: 加法
- -: 减法
- *: 乘法
- /: 除法
- %: 取余
- **: 求幂
BigInt 类型之间的操作符,可以直接使用如下的语法:
-- -------------------- ---- ------- ----- ------- - ---------------------- ----- ------- - --------------------- ----- ------- - ------- - -------- -- --------------------- ----- ------- - ------- - -------- -- --------------------- ----- ------- - ------- - -------- -- ------------------------------------------- ----- ------- - ------- - -------- -- -- ----- ------- - ------- - -------- -- ------------------- ----- ------- - ------- -- -------- -- -------------------
此外,整数的二进制、八进制、十六进制的表示方式也适用于 BigInt:
const bigInt1 = 0b10000n; // 16n const bigInt2 = 0o777n; // 511n const bigInt3 = 0xFFn; // 255n
进制转换
BigInt 类型还提供了进制转换的方法,使用 toString()
方法转换为字符串时,可以指定要使用的进制。
const bigInt1 = 1234567890123456789012345678901234567890n; console.log(bigInt1.toString()); // 1234567890123456789012345678901234567890 console.log(bigInt1.toString(10)); // 1234567890123456789012345678901234567890 console.log(bigInt1.toString(2)); // 10101001001111101100110010100001101111011101111100110010000011111011101100110011100111001100110010110101101101111011111010000101010001010011011101101110111111011001101101110 console.log(bigInt1.toString(8)); // 2635251350451077247071501626506645114531 console.log(bigInt1.toString(16)); // 303BAC55646DEBC60C04941DF9B1D5610FA5426E14C6
总结
BigInt 是 ECMAScript 2020 新引入的一种基本数据类型,可以方便地处理大整数,提高了 JavaScript 处理大数的能力。开发者们在处理大整数时,不再需要写冗余的代码和外部库,这将提高 JavaScript 的性能。了解和掌握 BigInt 的使用,对开发者们既有指导意义又有巨大的学习价值。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64745789968c7c53b01b738c