ES12 引入了一个新的数据类型 BigInt,用于表示大整数,支持任意精度运算。在之前的 JavaScript 版本中,数字类型的最大值是 (2^53 - 1),BigInt 类型则可以表示比此更大的整数。
为什么需要 BigInt?
由于 JavaScript 中的数字类型采用浮点数表示,存在精度问题。当数字非常大时,可能会出现精度丢失的情况,导致计算结果出现错误。而 BigInt 类型弥补了这一缺陷,可以安全地表示任意大小的整数。
如何创建 BigInt?
在数字的末尾添加一个 n 就可以创建一个 BigInt 类型的数值:
const bigNum = 123456789012345678901234567890n;
也可以通过 BigInt() 方法将一个数字转化为 BigInt:
const num = 123456789012345678901234567890; const bigNum = BigInt(num);
另外,可以在 BigInt() 中传入一个字符串来创建 BigInt,字符串的格式必须为整数,并且可以添加正负号:
const bigNum1 = BigInt("123456789012345678901234567890"); const bigNum2 = BigInt("-123456789012345678901234567890");
BigInt 的运算
BigInt 支持所有的基本数学运算,包括加减乘除、取模和幂运算。与使用 Number 类型时一样,对于 BigInt 进行不同类型之间的运算结果,结果会被自动转化为 BigInt 类型。
以下是几个示例:
-- -------------------- ---- ------- ----- - - -------------------------------- ----- - - -------------------------------- -- -- ----- --- - - - -- -- -------------------------------- -- -- ----- ---- - - - -- -- ------------------------------- -- -- ----- ------- - - - -- -- ------------------------------------------------------------------------------- -- -- ----- -------- - - - -- -- -- -- -- ----- ------ - - - -- -- ------------------------------ -- --- ----- --- - - -- --- -- ------------------------------------------------------------------------------------------------------------------------------展开代码
BigInt 和 Number 的转换
BigInt 和 Number 两种类型是不同的,它们不能直接比较、不能进行位运算。但是,BigInt 可以通过 Number() 方法将其转化为 Number 类型。
以下是几个示例:
-- -------------------- ---- ------- ----- ------ - -------------------------------- ----- --- - --------------- -- ---------- ----- ------ -- ----- ------- - -------------------------------- ----- ---- - ---------------- -- ---------------- ----- ---- - ----------------- ----- ------- - ------------- -- ----------------- ----- ------- - --------------------------- ----- ---- - ---------------- -- ----------------展开代码
BigInt 的限制
虽然 BigInt 可以表示任意大小的整数,但是,在某些情况下使用 BigInt 仍然存在一些限制:
- BigInt 类型不能与 Number 进行运算,需要先转化为统一的类型;
- BigInt 类型不能与原始类型相乘,只能与 BigInt 类型相乘;
- 在使用对象的时候,BigInt 类型不能与原始类型进行比较,需要使用 Object.is() 方法进行比较。
结束语
BigInt 是 ECMAScript 2020 中新增的一个数据类型,用于解决 JavaScript 中数字类型不能表示较大整数精度丢失的问题。本文介绍了 BigInt 的基本用法、运算和限制,希望对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bd54b2a231b2b7edfa18f1