ECMAScript 2020:"大管家"BigInt
随着数字领域的发展,JavaScript 也有了两个新的数值类型: BigInt 和 Number。在 JavaScript 中,每个数字都是一个 Number 类型,但是存在一些限制,例如只能表示 2 的 53 次方以内的整数,因此在涉及到超大数字计算时,JavaScript 不得不依赖于一些外部库。但现在,BigInt 可以很好地解决这些问题。
BigInt
BigInt 是 ECMAScript 2020 中引入的一个新类型。它可以表示任意大小的整数,从而允许 JavaScript 处理极大的数字,以用于密码学、货币和其他需要高度精确计算的应用程序。
使用 BigInt,我们可以轻松地处理大于 2 的 53 次方的数字。例如,下面的代码将会抛出一个错误:
console.log(2 ** 53 + 1); // 超出Number类型最大值
而以下代码则可以正常输出:
console.log(2n ** 53n + 1n); // 9007199254740993n
BigInt 以“n”结尾来表示一个 BigInt 类型的数字,这让我们可以轻松地辨别出一个 BigInt 类型的数字。
BigInt 可以使用与数字类型相同的算术操作符进行计算,如 +、-、*、/、% 和 **。BigInt 还可以进行位运算和比较运算,以及使用 Number 类型进行混合运算。
以下例子展示了一些可以使用 BigInt 的常见操作:
// javascriptcn.com 代码示例 let x = 1234567890123456789012345678901234567890123456789n; // 定义一个 BigInt 类型的变量 console.log(x + 1n); // 1234567890123456789012345678901234567890123456790n console.log(x - 1n); // 1234567890123456789012345678901234567890123456788n console.log(x * 2n); // 2469135780246913578024691357802469135780246913578n console.log(x / 2n); // 617283945061728394506172839506172839506172839453n console.log(x % 10n); // 9n console.log(x ** 2n); // 1524157875323883675049535156256668194500835762328224163934160493311961982796908841711531940641n console.log(x & 1n); // 1n,最后一位是1,表示它是奇数 console.log(x | 2n); // 1234567890123456789012345678901234567890123456789n,最后一位是1,所以和 2n 或后的结果和它本身相同 console.log(x < 12345678901234567890123456789012345678901234567891n); // true console.log(x > 12345678901234567890123456789012345678901234567891n); // false
需要注意的是,BigInt 和 Number 类型不是相互兼容的。因此,如果将一个 BigInt 类型的变量传递给一个需要 Number 类型的函数时,需要使用 Number() 函数进行类型转换。
let x = 123n; let y = Number(x); // 将 BigInt 变量 x 转换为 Number 类型 console.log(y); // 123
在处理 BigInt 时,我们还需要注意一些 JavaScript 的语言规则。例如,BigInt 类型不能与字符串直接进行运算,更不能与 Boolean 值进行运算。需要使用 BigInt() 函数将一个字符串转换成一个 BigInt 类型的变量。
let x = 12345678901234567890n; let y = "456789012345678901234567890n"; console.log(x + BigInt(y)); // 456789012345678914691357935860n console.log(x + y); // TypeError: Cannot mix BigInt and other types, use explicit conversions
在 JavaScript 中,我们可以使用 Object.prototype.toString() 方法获取一个变量对象的类型信息。对于 BigInt 类型的变量来说,这个方法将返回 “[object BigInt]”。
let x = 12345678901234567890n; console.log(Object.prototype.toString.call(x)); // [object BigInt]
BigInt 在 JavaScript 开发者工具箱中是一个非常实用的工具。它的使用能够极大地扩展开发者的工作范围,使开发人员可以更加自信地处理大型数字和数值计算。
总结
BigInt 可以帮助我们解决 JavaScript 中过去遇到的数值类型的限制。它可以有效地处理大型数字,扩展了 JavaScript 工具箱的功能。当处理大型数字时,BigInt 将是一个非常有用的帮手,可以使我们更高效地编写 JavaScript 代码。
示例代码
// javascriptcn.com 代码示例 // BigInt 示例代码 // 定义一个 BigInt 类型的变量 let x = 1234567890123456789012345678901234567890123456789n; // BigInt 加法 console.log(x + 1n); // 1234567890123456789012345678901234567890123456790n // BigInt 减法 console.log(x - 1n); // 1234567890123456789012345678901234567890123456788n // BigInt 乘法 console.log(x * 2n); // 2469135780246913578024691357802469135780246913578n // BigInt 除法 console.log(x / 2n); // 617283945061728394506172839506172839506172839453n // BigInt 取余 console.log(x % 10n); // 9n // BigInt 幂 console.log(x ** 2n); // 1524157875323883675049535156256668194500835762328224163934160493311961982796908841711531940641n // BigInt 位运算 console.log(x & 1n); // 1n // BigInt 位或 console.log(x | 2n); // 1234567890123456789012345678901234567890123456789n // BigInt 比较 console.log(x < 12345678901234567890123456789012345678901234567891n); // true console.log(x > 12345678901234567890123456789012345678901234567891n); // false // BigInt 类型转换 let y = Number(x); // 将 BigInt 变量 x 转换为 Number 类型 console.log(y); // 1.2345678901234568e+33 // BigInt 和字符串运算 let z = "456789012345678901234567890n"; console.log(x + BigInt(z)); // 456789012345678914691357935860n // BigInt 比较大小 let a = 123n; let b = 456n; console.log(a < b); // true console.log(a > b); // false console.log(1 > a - b); // true
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654589cc7d4982a6ebf3035d