随着计算机科学的不断发展,数字的大小和精度也不断提高。在 JavaScript 中,原来的数字类型只能表示 53 位的整数,对于更大的数字就需要借助第三方库或者手动实现。但在 ES11 中,引入了 BigInt 类型,可以轻松地处理更大的整数。
BigInt 类型
BigInt 类型是 ES11 中引入的新类型,它可以表示任意大小的整数,而不会溢出。BigInt 类型的值必须以 n 结尾,例如:
const bigIntNum = 1234567890123456789012345678901234567890n;
BigInt 类型与普通数字类型有很多区别:
- BigInt 类型的值不能与普通数字类型进行混合运算,必须使用 BigInt 类型的函数或运算符。
- BigInt 类型不能用于位运算或右移运算。
- BigInt 类型不能用于 Math 对象中的函数。
- BigInt 类型的值不能与字符串进行混合运算,必须使用 BigInt 类型的函数或运算符。
BigInt 的运算
BigInt 类型的运算与普通数字类型的运算有很多相似之处,例如加、减、乘、除等。但是也有一些不同之处,例如:
- BigInt 类型的加、减、乘、除运算,需要使用 BigInt 类型的函数或运算符,例如
BigInt()
、+
、-
、*
、/
、%
等。 - BigInt 类型的除法运算结果只保留整数部分,不保留小数部分。
- BigInt 类型的取模运算结果与普通数字类型的取模运算结果一致。
下面是一些 BigInt 类型的运算示例:
const a = 1234567890123456789012345678901234567890n; const b = 9876543210987654321098765432109876543210n; console.log(a + b); // 11111111111111111111111111111111111111100n console.log(a - b); // -8641975320864197532086419753208641975320n console.log(a * b); // 12193263113702179504497687874896754822137451776799917898565947063264849139400n console.log(a / b); // 0n console.log(a % b); // 1234567890123456789012345678901234567890n
BigInt 的扩展操作
在 ES11 中,对 BigInt 类型进行了扩展操作的支持,包括:
1. BigInt.asUintN(width, bigint)
该函数返回一个 width 位的无符号整数,其中 bigint 为 BigInt 类型的值。如果 bigint 的值超过了 width 位,则将其截断为 width 位,只保留最低的 width 位。
console.log(BigInt.asUintN(8, 1000n)); // 232n console.log(BigInt.asUintN(16, 1000n)); // 1000n console.log(BigInt.asUintN(32, 1000n)); // 1000n console.log(BigInt.asUintN(64, 1000n)); // 1000n console.log(BigInt.asUintN(128, 1000n)); // 1000n
2. BigInt.asIntN(width, bigint)
该函数返回一个 width 位的有符号整数,其中 bigint 为 BigInt 类型的值。如果 bigint 的值超过了 width 位,则将其截断为 width 位,只保留最低的 width 位。
console.log(BigInt.asIntN(8, 1000n)); // -24n console.log(BigInt.asIntN(16, 1000n)); // 1000n console.log(BigInt.asIntN(32, 1000n)); // 1000n console.log(BigInt.asIntN(64, 1000n)); // 1000n console.log(BigInt.asIntN(128, 1000n)); // 1000n
3. BigInt.prototype.toJSON()
该函数返回一个 BigInt 类型的值的 JSON 格式的字符串。
const num = 1234567890123456789012345678901234567890n; console.log(num.toJSON()); // "1234567890123456789012345678901234567890"
指导意义
BigInt 类型的引入,使得 JavaScript 可以处理更大的整数,对于一些需要处理大整数的场景,例如密码学、加密算法、数值计算等,将会有很大的帮助。同时,BigInt 的扩展操作也为处理大整数提供了更多的便捷和灵活性,使得开发者可以更加高效地处理大整数。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d94222a941bf71340d7eb7