ES2020 中的新特性:BigInt 的使用场景
你是否遇到过超过 JavaScript Number 类型最大值 2^53 的计算场景?比如说涉及到大型数据的加减乘除、排序等问题,这时候就需要使用 BigInt(大整数)类型来解决。在 ES2020 中,BigInt 引入了一些新的特性和使用场景。
BigInt 是一种特殊的数字类型,可以处理大于 2^53 的数字。ES2020 中发生了很多改变,BigInt 类型成为了内置类型之一。接下来,我们将了解 BigInt 的使用场景以及在 JavaScript 中如何使用它来解决实际问题。
BigInt 类型的使用
在 JavaScript 中,我们可以通过使用后缀 n 创建一个 BigInt 。例如:
const big = 1234567890123456789012345678901234567890n;
为了避免 BigInt 和 Number 混淆,BigInt 并不支持以下操作:
- 将 BigInt 变量与字符串或变量相加或相乘,需要使用 BigInt() 函数将其转换为 BigInt 类型。
- BigInt 变量与普通数字直接比较不会返回预期的结果,需要使用等价运算符 === 或 !===。
- BigInt 并不支持位运算或其他位操作。
BigInt 增强型操作符
ES2020 引入了一些新的增强型操作符,这些操作符仅适用于 BigInt 变量。
- 位运算
ES2020 添加了以下位运算符,可以用于 BigInt 型值。
- &(按位逻辑与)
- |(按位逻辑或)
- ^(按位逻辑异或)
- <<(左移)
(有符号右移)
(无符号右移)
以下是示例代码:
const bitmask = 0b11110000n; const foo = 0b10101010n; foo & bitmask; // 0b10100000n
- 位反转
~ 运算符已被定义为按位反转操作符。以下是示例代码:
~0b01n; // 0b-10n
- 幂次方运算
ES2020 引入了运算符 **,可以用于 BigInt 变量。
以下是示例代码:
2n ** 64n; // 18446744073709551616n
- 三元操作符
BigInt 型变量目前不支持三元运算符。
BigInt 的使用场景
使用 BigInt 类型可以解决一些超出了标准 Number 类型能表示的范围的计算。
例如,计算年龄的分类:
const age = BigInt('12345678901234567890'); if (age <= 0n) { console.log('未出生'); } else if (age <= 18n) { console.log('未成年'); } else if (age <= 50n) { console.log('中年'); } else { console.log('老年'); }
其他应用场景包括:
- 处理加密密钥和哈希值。
- 将无限精度的数值存储为类似文件或数据库的序列化数据或消息格式。
- 实现密码学和数论问题的算法。
总结
ES2020 中使用 BigInt 类型可以解决一些数字运算的问题。使用 BigInt 类型需要注意以下几点:
- BigInt 变量使用后缀 n 定义。
- BigInt 和 Number 型变量不能同时参与运算。
- BigInt 变量和字符串不能直接运算。
- BigInt 变量仅支持位运算和幂次方运算。
- BigInt 变量不支持三元操作符。
当你遇到需要处理大数值的时候,BigInt 类型会是一个有用的技术工具。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64f2a84ff6b2d6eab3c48a1c