ES11 BigInt 类型图文解析

阅读时长 5 分钟读完

在编程中,我们经常需要处理大整数,但是 JavaScript 中的 Number 类型最多只能表示到 2 的 53 次方,也就是 9007199254740992,对于超过这个范围的大整数就会出现精度丢失的问题。在 ES11 中,新增了BigInt类型,用于处理超出Number类型范围的大整数,本文将详细介绍BigInt类型的使用和相关注意事项。

定义 BigInt

在ES11中,BigInt类型用于表示任意大小的整数,它是一种新的原始数据类型,使用方式与其它JavaScript原始数据类型类似。使用BigInt类型需要在数字后面加一个n,例如:

我们还可以通过调用BigInt()函数将其他数据类型转换为BigInt类型:

运算符支持

BigInt类型的运算符跟Number基本相同,但是有些运算符不能混用BigInt和Number类型进行运算,会导致类型错误。

支持的运算符包括:

  • +:加法
  • -:减法
  • *:乘法
  • **:幂运算
  • /:除法
  • %:求余数
  • <<:左移
  • :右移

  • :无符号右移

  • &:按位与
  • |:按位或
  • ^:按位异或

无法混用的运算符有以下几种:

  • 其他数值类型与BigInt类型进行算数运算时会报TypeError异常
  • 值相等判断运算符(==和!=)不能用于BigInt类型
  • 大小比较运算符(>、<、>=、<=)也不能用于 BigInt 类型,因为这些运算符只支持数值类型。

应用示例

判断是否为偶数

BigInt类型的求余数运算%可以用来判断一个数是否为偶数。

阶乘计算

计算阶乘时,如果使用Number类型,多数情况下结果会出现精度丢失的问题。使用BigInt类型可以很好地解决该问题。

-- -------------------- ---- -------
-------- ------------ -
  -- -- - -- -
    ------ -----
  -
  -- -- -- -- -
    ------ ---
  -
  --- --- - ---
  --- ---- - - --- - -- -- ---- -
    --- -- --
  -
  ------ ----
-

---------------------------- -- --------------------

斐波那契数列

斐波那契数列的实现可以使用循环或者递归两种方式。使用BigInt类型可以解决数值过大导致的精度丢失问题。

使用循环的方式实现斐波那契数列:

-- -------------------- ---- -------
-------- ------------ -
  -- -- -- -- -
    ------ ---
  -
  -- -- --- -- -
    ------ ---
  -
  --- ---- - ---
  --- ---- - ---
  --- ---- - - --- - -- -- ---- -
    ----- ---- - ---- - -----
    ---- - -----
    ---- - -----
  -
  ------ -----
-

-----------------------------

使用递归的方式实现斐波那契数列:

-- -------------------- ---- -------
-------- ------------ -
  -- -- -- -- -
    ------ ---
  -
  -- -- --- -- -
    ------ ---
  -
  ------ ----------- - --- - ----------- - ----
-

-----------------------------

注意事项

  • 在用BigInt类型进行计算运算时,要使用BigInt类型的运算符,否则会报类型错误。
  • BigInt类型的变量不能与Number类型混用,否则会导致类型错误。
  • 在一些旧版的浏览器以及node.js的旧版中不支持BigInt类型,因此在使用BigInt类型时,需要先检查浏览器或node.js的版本是否支持。
  • BigInt类型的变量和常量不能用于位运算。
  • BigInt类型的变量不能用于模板字面量中。

总结

ES11中新增了BigInt类型,它用于处理超过Number类型范围的大整数。BigInt类型的使用方式类似于其它JavaScript原始数据类型,BigInt类型支持大部分的算数运算符,但不支持一些混用Number类型的运算符,同时也不能与Number类型混用。BigInt类型的应用具有广泛的现实意义,可以解决大数计算时的精度丢失问题。在实际应用中,需要注意一些使用限制,如不能用于模板字面量、不能与旧版浏览器或node.js混用等。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a91eda48841e9894569f28

纠错
反馈