在 JavaScript 中,数字类型是一种非常常见的数据类型。然而,由于其内部实现的限制,JavaScript 的数字类型只能表示一定范围内的整数和小数,对于超出这个范围的数字,就需要使用 BigInt 类型来表示。在 ES11 中,BigInt 类型被正式引入,为 JavaScript 的数字运算提供了更加丰富的功能。
BigInt 类型的定义和使用
BigInt 类型是一种新的原始数据类型,用于表示任意精度的整数。它的定义方法非常简单,只需要在一个整数后面加上 n
即可。例如:
const a = 123456789012345678901234567890n; const b = BigInt("123456789012345678901234567890");
上面的代码分别使用了字面量和构造函数的方式定义了两个 BigInt 类型的变量。
与普通的数字类型不同,BigInt 类型的变量不能与普通的数字类型进行混合运算,否则会抛出错误。例如:
const a = 123n; const b = 456; console.log(a + b); // TypeError: Cannot mix BigInt and other types
BigInt 类型的运算
BigInt 类型的运算与普通的数字类型类似,支持加、减、乘、除、取模等基本运算。同时,BigInt 类型还支持位运算和指数运算。
基本运算
BigInt 类型的加、减、乘、除、取模运算使用的是与普通的数字类型相同的运算符,即 +
、-
、*
、/
、%
。例如:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 1111111111111111111111111111111n console.log(a - b); // -864197532086419753208641975320n console.log(a * b); // 1219326311370217954113206249911386304209768965717362224100101n console.log(a / b); // 0n console.log(a % b); // 123456789012345678901234567890n
需要注意的是,除法运算会向下取整,例如:
const a = 10n; const b = 3n; console.log(a / b); // 3n
位运算
BigInt 类型支持位运算,包括按位与、按位或、按位异或、左移和右移等运算。位运算的运算符与普通的数字类型相同,即 &
、|
、^
、<<
、>>
、>>>
。例如:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a & b); // 123456789012345678901234567168n console.log(a | b); // 987654321098765432109876543322n console.log(a ^ b); // 987531864309753086432098766490n console.log(a << 10n); // 1267650600228229401496703205376n console.log(a >> 10n); // 120642463670354735268042030n console.log(a >>> 10n); // 120642463670354735268042030n
需要注意的是,位运算只能用于 BigInt 类型的变量之间,不能与普通的数字类型进行混合运算。
指数运算
BigInt 类型还支持指数运算,即 **
运算符。例如:
const a = 2n ** 100n; console.log(a); // 1267650600228229401496703205376n
需要注意的是,指数运算的结果仍然是 BigInt 类型,如果要将其转换为普通的数字类型,需要使用 Number()
或 parseInt()
函数进行转换。
BigInt 类型的常用方法
BigInt 类型还提供了一些常用的方法,例如 toString()
、valueOf()
、toLocaleString()
等。这些方法和普通的数字类型的方法类似,只不过返回的是 BigInt 类型的值。例如:
const a = 123456789012345678901234567890n; console.log(a.toString()); // "123456789012345678901234567890" console.log(a.toLocaleString()); // "123,456,789,012,345,678,901,234,567,890" console.log(a.valueOf()); // 123456789012345678901234567890n
总结
BigInt 类型的引入为 JavaScript 的数字运算提供了更加丰富的功能,使得 JavaScript 可以处理更加庞大的数字。当然,由于 BigInt 类型的引入是在 ES11 中才开始的,因此在有些浏览器中可能不支持 BigInt 类型。如果需要在旧版本的浏览器中使用 BigInt 类型,可以使用第三方库或者手写实现。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6603ee74d10417a22206d89f