ECMAScript 2020 新特性之一是引入了 BigInt 类型,这个新类型可以让开发者处理大整数数字,这些数字超出了 JavaScript 数字类型的最大值范围。BigInt 类型是 ECMAScript 2020 版本对语言类型的一个重要补充,本文将深入介绍如何使用 BigInt 类型。
什么是 BigInt
BigInt 类型是一种新的 JavaScript 基本类型,它可以处理比 Number 类型更大的整数数字。在 JavaScript 中,Number 类型使用 64 位浮点数来表示数字,这就是为什么在 JavaScript 中可以表示的最大数字是 2^53 - 1。如果尝试在 JavaScript 中处理比这个最大值还大的数字,就会遇到精度问题。
BigInt 类型与 Number 类型不同,BigInt 类型使用任意精度表示整数数字,不会遇到精度问题。BigInt 类型的值以 "n" 结尾,例如 "123456789012345678901234567890n"。
如何使用 BigInt
在 JavaScript 中,可以使用 BigInt() 函数将数值转换为 BigInt 类型。例如:
const bigIntNumber = BigInt(123456789012345678901234567890);
与 Number 类型不同的是,BigInt 类型不支持在数字后面添加字母来表示 16 进制、8 进制或 2 进制。如果需要处理这些进制的数字,可以使用字符串来创建 BigInt 类型,例如:
const hexBigInt = BigInt('0x123456789abcdef0123456789abcdef0'); const octalBigInt = BigInt('0o7777777777777777777777'); const binaryBigInt = BigInt('0b11111111111111111111111111111111111111111111111111111111111111');
另外,可以使用数学运算符来对 BigInt 类型的数字进行操作,例如加、减、乘、除、取模等等。BigInt 类型的运算符与 Number 类型的运算符使用方法相同,但是为了避免精度损失,BigInt 类型只能与 BigInt 类型进行运算。例如:
const bigA = BigInt(12345678901234567890); const bigB = BigInt(98765432109876543210); console.log(bigA + bigB); // 111111111111111111100432098765432100n console.log(bigB - bigA); // 86419753108641975320n console.log(bigA * bigB); // 1219326311370218415766480654785547689000n console.log(bigB / bigA); // 8000000000n console.log(bigB % bigA); // 494827980n
此外,BigInt 类型还支持位运算符,包括按位与、按位或、按位异或、左移、右移等等。这些运算符也不能与 Number 类型一起使用,只能与 BigInt 类型一起使用。例如:
const bigA = BigInt(0b1100110011001100110011001100110011001100110011001100110011001100); const bigB = BigInt(0b1010101010101010101010101010101010101010101010101010101010101010); console.log(bigA & bigB); // 680868680868680868680868680868680868680868680868680868680868680864n console.log(bigA | bigB); // 7258040190262217988169091143384542105580609827110007822138122601598n console.log(bigA ^ bigB); // 7257361318801539315376504828609632148462525210433149245555163130734n console.log(bigA << 10n); // 140737488355328n console.log(bigB >> 10n); // 405323966463425070n
循环中使用 BigInt
在循环中使用 BigInt 类型时,需要注意在进行循环初始化和变量增加时都要使用 BigInt 类型数据。如果其中有一个使用了 Number 类型的数据,就会导致循环出错。例如:
for (let i = 1n; i <= 10n; i++) { console.log(i * i); }
在该示例中,循环变量 i
使用了 BigInt 类型,因此循环会顺利执行,输出数字 1 到 100。如果循环变量使用了 Number 类型,例如:
for (let i = 1; i <= 10n; i++) { console.log(BigInt(i) * BigInt(i)); }
循环会在第一次执行时出错,因为在进行比较时 BigInt 类型不能与 Number 类型一起使用。
总结
BigInt 类型是 ECMAScript 2020 版本对语言类型的一个重要补充,可以处理比 Number 类型更大的整数数字,不会遇到精度问题。BigInt 类型的使用方法与 Number 类型类似,但是要注意不能与 Number 类型进行混合操作,也要特别小心在循环中使用 BigInt 类型。在实际开发中,需要根据实际情况评估是否需要使用 BigInt 类型,如果涉及到超出 JavaScript 数字类型范围的大数字,就可以考虑使用 BigInt 类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647e9d4948841e9894e4ff0a