在 JavaScript 中, Number 类型可以处理大部分数值计算,但是当处理超出 Number 范围的大整数时,会出现精度丢失的问题。ES8 中新增了 BigInt 类型,可以用来处理任意精度的整数计算。本文将介绍如何在 ES8 中使用 BigInt 类型进行数值计算。
BigInt 类型的定义
BigInt 类型是 ES8 新增的数据类型,用来表示任意大小的整数。它的定义方式与 Number 类型类似,只是在末尾加上 n 表示这是一个 BigInt 类型的值。
const bigIntValue = 1234567890123456789012345678901234567890n;
BigInt 类型的运算
BigInt 类型支持大部分的数值运算操作,包括加减乘除、取模、位运算等。在运算时,需要注意 BigInt 类型只能与 BigInt 类型相互运算,与 Number 类型运算会自动转换成 Number 类型。
加减乘除运算
BigInt 类型的加减乘除运算与 Number 类型的运算非常类似,只需要在末尾加上 n 表示这是一个 BigInt 类型的值。例如:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; const c = a + b; // 11111111111111111111111111111111111111100n const d = a - b; // -8641975320864197532086419753086419754320n const e = a * b; // 121932631137021795580560930316395112626143260928532509317702874221579726600n const f = a / b; // 0n
取模运算
BigInt 类型的取模运算使用 % 运算符。例如:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; const c = a % b; // 1234567890123456789012345678901234567890n
位运算
BigInt 类型也支持位运算,包括按位与、按位或、按位异或、左移和右移等运算。例如:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; const c = a & b; // 904252160881357503658568579454786304002n const d = a | b; // 10171199921494740538757263461972788921390n const e = a ^ b; // 10170295319803383082198600023524925917388n const f = a << 10n; // 12676480315677687419139468514107673984n const g = a >> 10n; // 120642366532180900648305464506223n
BigInt 类型的限制
虽然 BigInt 类型可以处理任意大小的整数计算,但是在实际使用中,也有一些限制需要注意。
不能与 Number 类型混合运算
由于 BigInt 类型只能与 BigInt 类型相互运算,与 Number 类型运算会自动转换成 Number 类型,因此会出现精度丢失的问题。例如:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210; const c = a + b; // 1.1111111111111112e+39
不能作为对象的属性名
由于 BigInt 类型的值是唯一的,不能与其他属性名重复,因此不能作为对象的属性名。例如:
-- -------------------- ---- ------- ----- --- - - --- --------- --- --------- --- -------- -- --------------------- -- -------- ---------------------- -- -------- -------------------- -- -------- ----------------------- -- ---------
示例代码
以下是一个使用 BigInt 类型进行加密解密的示例代码:
-- -------------------- ---- ------- -------- ------------ ---- - --- ------ - --- --- ---- - - -- - - ----------- ---- - ----- -------- - -------------------------- ----- ------- - ----------------------- - ------------- ----- ----------------- - -------- - -------- ------ -- ----------------------------------------------- - ------ ------- - -------- ------------ ---- - --- ------ - --- --- ---- - - -- - - ----------- ---- - ----- -------- - -------------------------- ----- ------- - ----------------------- - ------------- ----- ----------------- - -------- - -------- ------ -- ----------------------------------------------- - ------ ------- - ----- --- - ------- -------- ----- --- - --------- ----- ------------ - ------------ ----- -------------------------- ----- ------------ - --------------------- ----- --------------------------
以上代码使用了异或运算进行加密解密,其中 str 和 key 是明文和密钥,encryptedStr 是加密后的密文,decryptedStr 是解密后的明文。
总结
BigInt 类型是 ES8 新增的数据类型,用来表示任意大小的整数。它支持大部分的数值运算操作,包括加减乘除、取模、位运算等。但是在实际使用中,也有一些限制需要注意,例如不能与 Number 类型混合运算,不能作为对象的属性名等。在实际开发中,我们可以使用 BigInt 类型进行任意精度的整数计算,例如密码学、货币计算等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65cd9e1aadd4f0e0ff6d1d81