介绍
ECMAScript 2020 中新增了一个新的数据类型:BigInt。BigInt 是一种用来表示任意精度整数的原始数据类型,解决了 JavaScript 中整数精度有限的问题。在过去,如果需要处理非常大的整数,我们通常使用第三方库或者将整数转化为字符串来处理。但是这种方法不仅麻烦,而且性能也不够优秀。现在,有了 BigInt 数据类型,我们可以方便地直接操作非常大的整数,而不需要考虑精度问题。
使用
要使用 BigInt,我们需要在数字后添加 "n" 或者使用 BigInt() 方法来创建 BigInt 对象。例如:
const bigNum1 = 12345678901234567890n; const bigNum2 = BigInt("12345678901234567890");
我们可以直接对 BigInt 进行算术运算:
const bigNum1 = 12345678901234567890n; const bigNum2 = BigInt("12345678901234567890"); const result1 = bigNum1 + bigNum2; const result2 = bigNum1 * bigNum2;
如果 BigInt 和普通 Number 进行运算,则普通 Number 会被转换为 BigInt 对象,例如:
const bigNum1 = 12345678901234567890n; const num2 = 100; const result = bigNum1 + num2; // result 为 BigInt 对象
我们可以使用 BigInt.asIntN() 和 BigInt.asUintN() 方法将 BigInt 转换为有限位数的值:
const max = BigInt(2n ** 64n - 1n); const overflow = max + 1n; const maxAgain = BigInt.asUintN(64, max); const overflowAgain = BigInt.asUintN(64, overflow); console.log(maxAgain.toString()); // "18446744073709551615" console.log(overflowAgain.toString()); // "0"
我们也可以将 BigInt 转换为字符串,并可以指定进制数:
const bigNum = 12345678901234567890n; console.log(bigNum.toString()); // "12345678901234567890" console.log(bigNum.toString(16)); // "acdef01234567890"
注意事项
虽然 BigInt 看起来很好用,但是需要注意的是,它不能与普通 Number 进行混合计算。例如:
const bigNum = 12345678901234567890n; const num = 100; const result = bigNum + num; // 报错
如果需要进行混合计算,需要将 BigInt 转换为 Number,例如:
const bigNum = 12345678901234567890n; const num = 100; const result = Number(bigNum) + num;
另外,与普通 Number 类型不同,BigInt 类型不能使用 Math 对象中的方法。
总结
通过本文的介绍,我们了解了 ECMAScript 2020 中新增的 BigInt 数据类型,学习了如何使用 BigInt 进行算术运算、字符串转换和转换为特定位数的整数值。但是,需要注意的是,不能将 BigInt 与普通 Number 进行混合计算。在实际开发中,应该根据实际需求选择合适的数据类型,避免不必要的精度问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e58b22f6b2d6eab30ffe51