在 ES11 中,除了引入 nullish coalescing operator
和 optional chaining operator
这两个比较受欢迎的语法糖之外,还引入了一项新的基本数据类型:BigInt
。如果你曾经在 JavaScript 中处理过大数值,你会发现在 JS 中,数值范围是有限制的,这可能会对大数据的处理造成一些麻烦。而 BigInt 就是为了解决这个问题而生的。
BigInt 是什么?
首先,BigInt 是一种新的基本数据类型。它可以表示任意大的整数,没有最大值限制。在 ES11 中,BigInt 类型以后缀 n
表示,例如:
const foo = 123n;
注意,这里的后缀 n
不是字符串类型。如果你把 n
去掉,那就成了一个数字类型。BigInt 的一些基本用法:
const foo = 123n; const bar = BigInt("123"); const baz = BigInt(foo + bar); console.log(foo, bar, baz); // 输出:123n 123n 246n
相较于普通数字类型,BigInt 类型有以下不同之处:
- 数字必须附加
n
后缀 - 不能使用 Math 对象等常规数学操作
- BigInt 数值不能和普通数字类型进行混合运算
如何使用 BigInt?
在 BigInt 类型出现之前,对于大数值的处理,我们通常使用第三方库(比如 big.js)进行计算,因为当数字非常大时,原生的 JavaScript 数字类型无法精确表示。
有了 BigInt 后,我们可以直接使用这个新类型,省去引入第三方库的麻烦。示例:
const bigint_1 = 90071992547409910n; const bigint_2 = 90071992547409910n; console.log(bigint_1 + bigint_2); // 输出:180143985094819820n
我们也可以用 BigInt 进行一些基本运算:
const bigint_1 = 123n; const bigint_2 = 456n; console.log(bigint_1 + bigint_2); // 输出:579n
但是需要注意的是,我们不能像数字类型那样给 BigInt 类型添加小数点。比如:
const bignumber = 12345.6n; // 抛出错误
BigInt 类型的应用场景
因为 BigInt 可以表示非常大的数值,大数值的处理是比较常见的场景。通常来说,BigInt 可以应用于下列场景:
- 加密
比如对称(如 AES)和非对称加密(如 RSA)算法中,需要用到极大整数768位以上的复杂计算。BigInt 可以直接使用,省去转换的过程。
- 数据库操作
使用 BigInt 可以更轻松地处理所需精度的计算(比如数据库中的自增 ID)。
- 统计学计算
极大整数直接进行计算,可以避免过大过小的情况下,精度的问题。
- 区块链操作
区块链领域常常需要处理非常大的整数,常常用到 BigInt。
总结
在 ES11 中,BigInt 类型的引入是对 JavaScript 语言的一次重要升级。当我们处理非常大的整数数据时,BigInt 类型可以帮助我们更高效地进行计算。同时,与其他语言不同的是,JavaScript 中的 BigInt 带有可读性极强的后缀 n
,是一项非常好用的新增特性。在实际开发中,应该灵活使用 BigInt
,提高自己的技能水平。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a68e5648841e98943347c7