在过去的 JavaScript 中,数字类型使用的是 IEEE 754 标准的双精度浮点数,其最大安全整数范围为 2^53 - 1。对于一些需要处理大数字的场景,这个范围显然是不够的。ECMAScript 2020 引入了一种新的数字类型:BigInt,用于解决这个问题。
BigInt 类型的基本使用
BigInt 类型的基本使用与普通数字类型类似,唯一的区别在于数字后面需要加上 n
或 N
表示这是一个 BigInt 类型的数字。
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 1111111111111111111111111111111n
需要注意的是,BigInt 类型的数字与普通数字类型不能混合运算,否则会抛出类型错误。
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210; console.log(a + b); // TypeError: Cannot mix BigInt and other types
BigInt 类型的高精度计算
BigInt 类型最大的优势在于它能够进行高精度计算。以计算阶乘为例,使用普通数字类型可能会出现精度丢失的情况。
-- -------------------- ---- ------- -------- ------------ - --- ------ - -- --- ---- - - -- - -- -- ---- - ------ -- -- - ------ ------- - --------------------------- -- ------------------- --------------------------- -- ---------------------------------
但是使用 BigInt 类型则可以避免这个问题。
-- -------------------- ---- ------- -------- ------------ - --- ------ - --- --- ---- - - --- - -- -- ---- - ------ -- -- - ------ ------- - --------------------------- -- -------------------- --------------------------- -- ----------------------------------
BigInt 类型的其他特性
除了高精度计算外,BigInt 类型还有一些其他特性。
比较运算
BigInt 类型的数字可以进行比较运算,但是需要使用 ===
或 !==
,不能使用 <
、>
、<=
、>=
。
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a === b); // false console.log(a !== b); // true console.log(a > b); // TypeError: Cannot use '>' operator to BigInt values
位运算
BigInt 类型的数字可以进行位运算,包括按位与、按位或、按位异或、左移和右移等。
const a = 0b1100n; const b = 0b1010n; console.log(a & b); // 0b1000n console.log(a | b); // 0b1110n console.log(a ^ b); // 0b0110n console.log(a << 2); // 0b110000n console.log(a >> 2); // 0b0011n
总结
BigInt 类型是 ECMAScript 2020 中的一个新特性,用于解决 JavaScript 中处理大数字的问题。它可以进行高精度计算,比较运算和位运算等操作。在具有大数字计算需求的场景下,可以考虑使用 BigInt 类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65dc098a1886fbafa48da0e4