在 JavaScript 中,数字类型是有限制的,最大值为 Number.MAX_SAFE_INTEGER(即2^53-1)。当需要处理比这个更大范围的整数时,我们可以使用 ECMAScript 2019 中引入的新类型——BigInt。
BigInt 的基础使用
BigInt 是一种新的内置对象类型,用于表示任意精度的整数。与 Number 类型不同,BigInt 可以表示比 Number.MAX_SAFE_INTEGER 更大或更小的整数,它在数字后面添加 n 表示变量为 BigInt。
const x = 100000000000000000000000000n; // 创建一个 BigInt 数字 console.log(x); // 100000000000000000000000000n
注意:BigInt 在开发者工具中末尾默认加 n,但是,在代码中赋值时不能直接写成 BigInt(100000000000000000000000000)
。
下面是一些与 BigInt 相关的操作:
加法、减法、乘法和除法
const a = 9007199254740991n; const b = 1234567890123456789n; const c = a + b; // 从这里可以看出 BigInt 是否被支持 const d = a - b; const e = a * b; const f = b / a;
模运算
const a = 7n; const b = 3n; const c = a % b; // 1n
使用 BigInt 处理大量数据
统计大型日志文件中 IP 地址的出现次数
通常处理大型日志文件时,需要快速准确地统计其中出现的 IP 地址和频率。由于日志文件大小可能达到 GB 级别,在传统上极易造成程序崩溃或运行缓慢。在此例子中,我们使用 BigInt 来解决这个问题。
// javascriptcn.com 代码示例 const logFile = [ '192.168.1.1', '8.8.8.8', '192.168.1.55', //... ]; const ipMap = new Map(); // 存储 IP 地址和它们被发现的次数 for (let i = 0; i < logFile.length; i++) { const ip = logFile[i]; if (ipMap.has(ip)) { ipMap.set(ip, ipMap.get(ip) + 1n); } else { ipMap.set(ip, 1n); } } console.log(ipMap.get('192.168.1.55')); // 1n console.log(ipMap.get('8.8.8.8')); // 1n console.log(ipMap.size); // 3 - 记录了所有不同 IP
大数阶乘
计算阶乘是一个著名的问题。如果数字非常大会带来巨大的挑战认为。使用 BigInt 我们可以轻松解决这个问题。
以下是代码示例:
// javascriptcn.com 代码示例 function factorial(n) { let result = 1n; for (let i = 1n; i <= n; i++) { result *= i; } return result; } console.log(factorial(100n));
总结
在处理需要处理大量数据的 JavaScript 应用程序中,BigInt 提供了一个解决方案,允许我们表示整数比 JavaScript 中的 Number 类型更为广泛。BigInt 也可以帮助我们有效地处理整数计算问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6529e84e7d4982a6ebc4ad15