在过去的 JavaScript 中,数字类型只能表示从 -2^53
到 2^53
范围内的整数,而对于更大的数字需使用第三方库进行处理。为了解决这个问题,ECMAScript 2020(也称为 ES11)引入了一种新的数字类型:BigInt。
什么是 BigInt?
BigInt 是一种全新的 JavaScript 数据类型,它可以表示任意精度的整数,不再受到数字范围的限制。BigInt 只是用于处理大数字,不能与数字类型交互。
例如,在过去的 JavaScript 中,我们可以用以下代码表示最大的整数:
------------------------------------- -- ---------------- ----------------------------------- - --- -- ---------------- ----------------------------------- - --- -- ----------------
但是,在 BigInt 中,我们可以轻松表示一个数值达到十几个甚至几百个字符长的数字:
----- --------- - ------------------------------------------ ----------------------- -- -----------------------------------------
在上面的代码中,n
后缀表示一个 BigInt 字面量。
如何使用 BigInt?
BigInt 的语法与数字类型相似,但需要在整数后面添加一个 n
后缀。例如:
----- --------- - --------------------------------------------------------- ----------------------- -- --------------------------------------------------------
当对 BigInt 进行运算时,需要使用 BigInt 类型的方法,而不能使用数字类型的方法。例如:
----- ---- - ---------------------- ----- ---- - ---------------------- ---------------- - ------ -- ---------------------- ---------------- - ------ -- ----------------------- ---------------- - ------ -- ----------------------------------------- ---------------- - ------ -- -------------------------------
需要注意的是,如果将 BigInt 赋值给数字类型,它将自动转换为 Number 类型,从而可能会丢失精度:
----- --------- - ---------------------- ----- --- - ---------- -- ------ ------ -- ----------------- -- --------------------
因此,如果有需要对 BigInt 进行转换的,需要使用 Number()
函数进行转换。
支持 BigInt 的新方法
除了可以直接对 BigInt 进行数学运算以外,ES11 还引入了一些新的方法来处理 BigInt,例如:
1. 指数运算符
指数运算符是一个 **
符号,在 ES7 中已经存在。但是,在 BigInt 的情况下,它允许我们计算超大数字的幂,例如:
--------------- -- ------ -- ----------------------------------------------------------------------------------------------------
2. BigInt()
函数
BigInt()
函数用于将数字或字符串转换为 BigInt:
------------------------- -- ---- --------------------------- -- ----
3. BigInt.asUintN(width, n)
和 BigInt.asIntN(width, n)
函数
这两个函数用于将 BigInt 限制为 width
位,具体来说,BigInt.asUintN(width, n)
将整数转换为无符号 width
位整数,而 BigInt.asIntN(width, n)
将整数转换为 width
位带符号整数:
----------------------------- ------- -- ------- --- -- - ------- ----------------------------- ------- -- ----- --- --- - ------------------------ - - ---------------------------- -------- -- ----- ---- ------- --- -------- - -- ---------------------------- ------- -- ------ --- ------ - ----------- ---- ----------- --
结论
BigInt 是 ES11 中的一项重大改进,它对 JavaScript 来说是一个巨大的进步。通过 BigInt,我们可以处理超出数字范围的大数值,从而在以前需要使用第三方库的情况下使开发更加便捷。但注意需要在转换时切记精度的问题,以免丢失了精度。
示例代码
----- ---- - ---------------------- ----- ---- - ---------------------- ---------------- - ------ -- ---------------------- ---------------- - ------ -- ----------------------- ---------------- - ------ -- ----------------------------------------- ---------------- - ------ -- ------------------------------- --------------- -- ------ -- ------------------------------------------------------------------------------------------------- ---------------------- - --------------- -- -------- ------------------------------------------- -- -------------------- ----------------------------- ------- -- ---- ----------------------------- ------- -- -- ---------------------------- -------- -- -- ---------------------------- ------- -- ---
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67093326d91dce0dc8774c24