引言
BigInt 是 JavaScript 的一种新数据类型,它专门用于处理超出 Number 类型表示范围的整数。在早期版本的 JavaScript 中,由于 Number 类型的值只能表示特定的数值范围,JavaScipt 程序员在处理大整数时常常需要使用一些库或特定算法。但是在 ES11 中,BigInt 数据类型已经被加入到了语言规范中,使得处理大整数更加方便,同时也提高了 JavaScript 语言的可扩展性。
功能
BigInt 的主要功能是支持大整数运算。在传统的 JavaScript 中,Number 类型可以表示的范围是 $[-2^{53}, 2^{53}-1]$,超过这个范围的整数将被转换成科学计数法形式表示或被设置为 Infinity。然而,在科学计数法或 Infinity 的表示方式下,我们无法精确地表示或计算大整数。
BigInt 可以表示的整数范围非常大,几乎可以看做没有上限。而且,由于它是一个独立的数据类型,因此它不会受到 Number 类型的限制。
下面是一个使用 BigInt 计算两个超大整数的例子:
const bigInteger1 = BigInt('9007199254740991999') const bigInteger2 = BigInt('9999999999999999999') const result = bigInteger1 + bigInteger2 console.log(result) // 19017159224794761968n
使用
使用 BigInt 的方法非常简单,只需要在数字后面加一个小写字母 "n",就可以生成一个 BigInt 类型的值。
下面是一些用于创建 BigInt 对象的示例代码:
const bigInteger1 = 1234567890n; const bigInteger2 = BigInt("9876543210"); const bigInteger3 = BigInt(4567891230);
虽然 BigInt 类型的值可以通过加、减、乘、除等运算符进行运算,但是需要注意,BigInt 值与普通的 Number 值(即不带 "n")之间不能直接运算。
const a = 12345678901234567890n const b = 123 console.log(a + b) // TypeError: Cannot mix BigInt and other types, use explicit conversions
当我们需要将 BigInt 类型的值转换成 Number 类型的值时,可以使用带有 Number 类型的参数的函数,如 Number()、parseInt() 或 parseFloat()。
const bigIntNumber = BigInt("12345678901234567890") const regularNumber = Number(bigIntNumber) console.log(regularNumber) // 1.2345678901234568e+19
限制
尽管 BigInt 类型提供了很多好处,但它并不是没有限制的。下面列出了一些需要注意的限制:
- BigInt 与普通数值类型存在一定的互操作性限制。
- 只能使用 BigInt 类型的构造函数或带有 "n" 后缀的数字字面义,将一个普通数值类型转换成 BigInt 类型。
- 和普通数值类型比较时,必须显式使用 == 或 === 运算符进行转换。
- BigInt 可以使用 +、-、*、/ 等运算符进行运算,但不能使用小数点运算符运算。
- BigInt 对象可以转换成普通数值类型,但是由普通数值类型不能直接转换成 BigInt。
结论
BigInt 是 JavaScript 的一种新数据类型,它可以表示超出 Number 类型范围的整数。BigInt 的使用非常简单,只需要在数字后面加一个小写字母 "n",就可以生成一个 BigInt 类型的值。使用 BigInt 类型可以使得处理大整数更加方便,在写 JavaScript 应用程序时提供了很大的便利。同时,开发者也需要注意 BigInt 与普通数值类型之间的限制,并注意在合适的时候进行转换。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67500325fbd23cf890723ae2