介绍
在 Javascript 中,通常使用 Number 类型来表示数字。但是,由于 Number 类型的精度限制,当数字过大时会出现精度丢失的情况。为了解决这个问题,ES11 引入了一个新的原始数据类型:BigInt。
BigInt 类型可以用来表示任意大小的整数,不受 Number 类型的精度限制。它可以表示整数的最大值为 2 的 53 次方减 1 之外的任何值。
内部表现
BigInt 的内部表示方式是一个带符号的整数,采用二进制补码表示。在 JavaScript 中,BigInt 类型的字面量是以 n 结尾的整数,例如:
const bigNum = 1234567890123456789012345678901234567890n;
大多数运算符和函数都支持 BigInt,例如:
console.log(10n + 5n); // 15n console.log(10n - 5n); // 5n console.log(10n * 5n); // 50n console.log(10n / 5n); // 2n console.log(10n % 3n); // 1n console.log(10n ** 3n); // 1000n console.log(Math.floor(10n / 3n)); // 3n console.log(Number(10n)); // 10
需要注意的是,BigInt 类型不能与 Number 类型混合计算,否则会抛出错误。
使用方法
与 Number 类型不同,BigInt 是一个对象,它提供了一些方法来处理 BigInt 类型的数据,例如求绝对值、比较大小、转换为字符串等。
// javascriptcn.com 代码示例 // 求绝对值 console.log(Math.abs(-123n)); // 123n // 比较大小 console.log(10n > 5n); // true console.log(10n >= 10n); // true console.log(10n < 5n); // false console.log(10n <= 10n); // true console.log(10n === 10n); // true // 转换为字符串 console.log(123n.toString()); // "123" console.log((-123n).toString()); // "-123" console.log((255n).toString(16)); // "ff"
在 BigInt 类型中,也可以使用大部分的 bit 操作符,例如按位与、按位或、按位异或等。
console.log(0b1100n & 0b1010n); // 8n console.log(0b1100n | 0b1010n); // 14n console.log(0b1100n ^ 0b1010n); // 6n console.log(~0b1100n); // -13n console.log(0b1100n << 1); // 24n console.log(0b1100n >> 1); // 6n
同时,BigInt 类型也可以使用位运算符以外的大多数运算符,例如加减乘除等。
示例代码
下面是一个使用 BigInt 类型的示例代码,在处理大数计算时可以使用 BigInt 达到更高的精度。
// javascriptcn.com 代码示例 function factorial(n) { let result = 1n; for (let i = 1n; i <= n; i++) { result *= i; } return result; } console.log(factorial(100n));
在这个示例代码中,我们定义了一个 factorial 函数,用于计算阶乘。由于阶乘的结果会很大,超出了 Number 类型的精度限制,我们使用 BigInt 类型来处理计算。
总结
ES11 引入了 BigInt 类型来解决 Number 类型精度不足的问题,它可以表示任意大小的整数,提供了大多数运算符和方法来处理 BigInt 类型的数据。在处理大数计算时,可以使用 BigInt 达到更高的精度。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654da6157d4982a6eb713e14