ECMAScript 2021 (ES12) 中对 BigInt 的了解与使用
随着计算机科技不断发展,我们的日常工作和生活中处理的数据也越来越大,而在前端领域中,数值类型数据的处理一直是一个比较重要的问题。ES2021 (ES12) 中引入了 BigInt 类型,可以用来处理超过 Number 类型表示范围的整数数据,本文将详细介绍 BigInt 类型的了解与使用。
BigInt 简介
BigInt 是一种新的数据类型,它可以用来处理超过 Number 类型表示范围的整数。在 ES2021 中,BigInt 已经被正式纳入到 ECMAScript 规范中,因此我们可以在现代浏览器和 Node.js 中使用它。
BigInt 类型的取值范围和 Number 类型不同,BigInt 可以处理任意精度的整数,而 Number 则只能处理 [-2^53, 2^53] 范围内的整数(即 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER)。
BigInt 值可以通过在整数值后面添加 n 或者通过调用构造函数来创建。例如:
const x = 123456789012345678901234567890n; // 注意后面有一个 n const y = BigInt(123456789012345678901234567890);
BigInt 支持的运算符和方法
BigInt 支持所有 Number 支持的运算符,例如加法(+)、减法(-)、乘法(*)、除法(/)以及取模(%)等,同时,它还支持一些新的运算符和方法。
- 指数运算符(**)
const x = 2n ** 53n; // 2^53
- BigInt.asUintN(bits, val) 和 BigInt.asIntN(bits, val)
BigInt.asUintN 方法和 BigInt.asIntN 方法可以用来截断一个值的位数,将其转换为一个指定位数的 BigInt 值。在处理位运算时非常有用。
const x = BigInt.asIntN(8, 0b11111111n); // x = -1n const y = BigInt.asUintN(8, 0b11111111n); // y = 255n
- BigInt.prototype.toString() 和 BigInt.prototype.valueOf()
与 Number 类型类似,BigInt 实例也有 toString() 方法和 valueOf() 方法。toString() 方法将 BigInt 值转换为字符串,而 valueOf() 方法则返回 BigInt 值本身。
const x = 123456789012345n; console.log(x.toString()); // "123456789012345" console.log(x.valueOf()); // 123456789012345n
BigInt 和 Number 的运算
BigInt 和 Number 之间的运算需要注意,因为它们是两种不同的数据类型。由于 Number 的精度限制,计算过程中可能会产生精度损失或舍入误差。
在对 BigInt 和 Number 进行运算时,JS 引擎会自动将 Number 类型转换为 BigInt 类型,然后进行运算。如果 BigInt 和 Number 都是整数,运算结果也会自动转换为 BigInt 类型。
const x = 123n + 45; // x = 168n const y = 123n / 45; // y = 0n
BigInt 的应用场景
BigInt 可以用于任何需要处理超过 Number 表示范围的整数场景,例如:
处理密码学算法中的大素数、大质数等场景。
处理货币计算时需要精确到小数点后多少位的场景。
处理超大数据集的场景,如大型计算机模拟、物理计算等。
实例演示
下面是一些实例演示,帮助读者更好的理解 BigInt 类型和 BigInt 的使用。
- 计算斐波那契数列第 n 项的值
-- -------------------- ---- ------- -------- ------ - -- -- --- - -- - --- -- - ------ ---------- - --- - - ---------- --- - - ---------- --- ---- - - -- - -- -- ---- - --- -- - --- - - --- - ------ -- -
- 判断一个数是否为质数
-- -------------------- ---- ------- -------- ---------- - -- -- -- --- - ------ ------ - --- ---- - - --- - -- - -- ----- ---- - -- -- - - --- --- - ------ ------ - - ------ ----- -
总结
简而言之,BigInt 是一种新的数据类型,它可以处理超过 Number 类型表示范围的整数。在 ES2021 中,BigInt 已被纳入到 ECMAScript 规范中,可以用于现代浏览器和 Node.js 中。BigInt 支持所有 Number 支持的运算符,并且还支持一些新的运算符和方法。在使用 BigInt 和 Number 进行运算时需要注意数据类型的自动转换。BigInt 可以用在处理超大数字、密码学算法和精确计算等场景中,是一种非常有用的数据类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c9f1375ad90b6d0418be75