在 JavaScript 中,数字类型默认是 Number,但是 Number 类型有一个限制,它只能表示 53 位精度的整数。如果需要处理更大的整数,就需要使用 BigInt 类型。
BigInt 是什么?
BigInt 是一种新类型,它可以表示任意精度的整数,没有位数限制。BigInt 类型的值可以通过在整数后面加上 "n" 来创建。
const bigIntNum = 1234567890123456789012345678901234567890n; console.log(bigIntNum); //1234567890123456789012345678901234567890n
BigInt 的优势
使用 BigInt 类型的主要优势是可以处理更大的整数。在 Number 类型中,最大的整数是 Number.MAX_SAFE_INTEGER
,它的值为 2^53 - 1,即 9007199254740991。如果需要处理更大的整数,就需要使用 BigInt 类型。
const maxSafeInt = Number.MAX_SAFE_INTEGER; console.log(maxSafeInt); //9007199254740991 const bigIntNum = 1234567890123456789012345678901234567890n; console.log(bigIntNum); //1234567890123456789012345678901234567890n
BigInt 的运算
BigInt 类型支持所有的基本运算,包括加减乘除、位运算、比较运算等。BigInt 类型的运算结果也是 BigInt 类型。
-- -------------------- ---- ------- ----- ---- - ------------------------------------------ ----- ---- - ------------------------------------------ ---------------- - ------ -------------------------------------------- ---------------- - ------ -------------------------------------------- ---------------- - ------ -------------------------------------------------------------------------------- ---------------- - ------ ---- ---------------- - ------ ------------------------------------------- ---------------- - ------ ------- ---------------- - ------ ------ ---------------- --- ------ -------
BigInt 的注意事项
BigInt 类型不能与 Number 类型进行混合运算,否则会抛出错误。
const num1 = 1234567890123456789012345678901234567890n; const num2 = 9876543210987654321098765432109876543210; console.log(num1 + num2); //Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
BigInt 类型也不能使用 Math 对象中的方法,需要使用 BigInt 对象中的方法。
console.log(Math.abs(1234567890123456789012345678901234567890n)); //Uncaught TypeError: Math.abs cannot be called with a BigInt value console.log(BigInt.asUintN(64, -1234567890123456789012345678901234567890n)); //10231760183304594826n
总结
ES11 中新增了 BigInt 类型,它可以处理任意精度的整数,没有位数限制。BigInt 类型支持所有基本运算,但不能与 Number 类型进行混合运算。在处理大整数时,可以使用 BigInt 类型,避免精度丢失的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650bea3c95b1f8cacd5fa651