随着现代计算机技术的不断发展,数字计算也越来越复杂,对于 JavaScript 而言,它的数字类型默认只能表示 2 的 53 次方以内的整数,尝试进行更大数值的运算会产生精度丢失的问题,这在很多场景下都是不被允许的,于是 ES11 引入了 BigInt 数据类型,使得 JavaScript 支持更大范围的整数运算。
1. BigInt 简介
BigInt 类型表示一种大整数类型,它可以超出 JavaScript 原先的数字类型的限制,可以表示任意位数的整数,但需要注意的是,BigInt 类型和 Number 类型是不同的,不能直接进行计算或比较,需要使用 BigInt 对象或表达式来操作。例如:
const a = 123456789012345678901234567890n; // 这里使用 BigInt 字面量表示一个大整数 const b = BigInt('123456789012345678901234567890'); // 使用 BigInt 构造函数将字符串转换为 BigInt 类型 console.log(typeof a, typeof b); // 输出:bigint bigint console.log(a + b); // 这里会抛出 TypeError 异常,因为 BigInt 与 Number 类型不能直接相加
2. BigInt 支持的运算
BigInt 支持 JavaScript 常见的算术运算、位运算、比较运算等操作,如果我们需要进行加、减、乘、除等运算,需要使用 BigInt 对象或 BigInt 表达式,例如:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 输出:111111111111111111111111111111111n console.log(a - b); // 输出:-86419753208641975321679012320n console.log(a * b); // 输出:121932631137021795402058322536885633479631720055790521009785740090n console.log(a / b); // 输出:0n(BigInt 类型的除法不支持小数,结果只保留整数部分)
如果我们需要进行位运算、比较运算等操作,也可以使用 BigInt 类型,例如:
const a = 255n; console.log(a << 1n); // 输出:510n(左移位运算) console.log(a & 15n); // 输出:15n(按位与运算) console.log(a > 128n); // 输出:true(大小比较运算)
3. BigInt 的使用场景
BigInt 类型通常用于需要进行高精度计算的场景,例如加密、哈希计算、精确计算等。在实际开发中,我们可能会遇到需要对大整数进行加、减、乘、除等运算的场景,如果使用 JavaScript 原生的 Number 类型,很容易出现精度丢失的问题,因此可以考虑使用 BigInt 类型。
下面是一个使用 BigInt 类型计算阶乘的示例:
-- -------------------- ---- ------- -------- ------------ - --- ------ - --- -- --- ------ - ------ --- - --- ---- - - --- - -- -- ---- - ------ -- -- -- -- -- ----------- - ------ ------- - ----------------------------- -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------
4. 总结
ES11 中的 BigInt 类型为 JavaScript 提供了更加完善的数字计算能力,使得我们可以对大整数进行精确计算,避免了精度丢失的风险。但是需要注意的是,由于 BigInt 类型的引入,JavaScript 运行时环境的内存消耗也会增加,因此在实际开发中,需要根据具体场景进行权衡,选择合适的数据类型进行计算。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6492760348841e9894044fa9