在前端开发中,经常需要处理大量的数据。但是,JavaScript 中的数字类型有其限制:最大安全整数为 2^53 - 1,而超出这个范围的数字会失去精度。为了解决这个问题,ECMAScript 2021 引入了一个新的数字类型:BigInt。BigInt 类型可以表示任意大的整数,而不会失去精度。
BigInt 的基本用法
BigInt 类型的字面量表示方法是,在数字后面加上 n
:
const bigNumber = 1234567890123456789012345678901234567890n;
也可以通过 BigInt()
函数将一个数字转换成 BigInt 类型:
const bigNumber = BigInt(1234567890123456789012345678901234567890);
需要注意的是,BigInt 类型不能与普通数字类型混合运算,否则会报错:
const a = 123n; const b = 456; console.log(a + b); // 报错:Cannot mix BigInt and other types
BigInt 的运算
BigInt 类型支持常见的数学运算符,如加减乘除、求余数等。例如:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; console.log(a + b); // 11111111111111111111111111111111111111100n console.log(b - a); // 8641975320864197532086419753208641975320n console.log(a * b); // 12193263113702179548948749763526930828942939311662827688059615610225240726200n console.log(b / a); // 79n console.log(b % a); // 2469135802469135802469135802469135802460n
此外,BigInt 还支持位运算符,如按位与、按位或、按位异或、左移和右移等。例如:
const a = 0b1010n; // 二进制表示的十进制数 10 const b = 0b1100n; // 二进制表示的十进制数 12 console.log(a & b); // 0b1000n,按位与运算,结果为 8 console.log(a | b); // 0b1110n,按位或运算,结果为 14 console.log(a ^ b); // 0b0110n,按位异或运算,结果为 6 console.log(a << 2); // 0b101000n,左移 2 位,结果为 40 console.log(b >> 1); // 0b0110n,右移 1 位,结果为 6
BigInt 的比较
BigInt 类型支持比较运算符,如小于、大于、等于等。需要注意的是,BigInt 类型与普通数字类型的比较是不相等的。例如:
const a = 123n; const b = 123; console.log(a == b); // false console.log(a === b); // false console.log(a < b); // false console.log(a > b); // false
如果需要比较 BigInt 类型和普通数字类型,可以将普通数字类型转换成 BigInt 类型,或者将 BigInt 类型转换成普通数字类型。例如:
const a = 123n; const b = 123; console.log(a == BigInt(b)); // true console.log(Number(a) === b); // true
BigInt 的应用场景
BigInt 类型的应用场景主要是处理大量的整数,例如密码学、大数计算、物理计算等。下面是一个使用 BigInt 计算阶乘的示例代码:
function factorial(n) { let result = 1n; for (let i = 2n; i <= n; i++) { result *= i; } return result; } console.log(factorial(100n)); // 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n
总结
ECMAScript 2021 引入了 BigInt 类型,可以表示任意大的整数,而不会失去精度。BigInt 类型支持常见的数学运算符和位运算符,也支持比较运算符。BigInt 类型的应用场景主要是处理大量的整数,例如密码学、大数计算、物理计算等。在实际开发中,如果需要处理大量的整数,可以考虑使用 BigInt 类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650c290395b1f8cacd639cdb