在 ECMAScript 2020(ES11)中,新增了一种数据类型:BigInt。它是一种可以表示任意大整数的数据类型,可以用来解决 JavaScript 中整数运算的精度问题。
BigInt 转换
在 JavaScript 中,我们可以使用 Number 类型来表示整数,但是它有一个限制,即最大能够表示的整数为 2^53 - 1。当我们需要处理更大的整数时,就需要使用 BigInt 类型了。
在 ES11 中,我们可以使用前缀 n
将一个普通的数字转换为 BigInt 类型,例如:
const bigNum = 123456789012345678901234567890n;
注意,使用 BigInt 类型时需要在数字后面加上 n
,否则会被当做普通的数字处理。
我们也可以使用 BigInt()
函数将一个字符串转换为 BigInt 类型,例如:
const bigNum = BigInt('123456789012345678901234567890');
BigInt 运算
使用 BigInt 类型时,我们可以进行基本的数学运算,例如加、减、乘、除和取模。BigInt 类型的运算符与 Number 类型的运算符相同,只是需要在运算符前加上 n
。
例如,我们可以进行以下运算:
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; const sum = a + b; const difference = a - b; const product = a * b; const quotient = a / b; const remainder = a % b;
BigInt 和 Number 的转换
在 BigInt 和 Number 之间进行转换时,需要注意精度问题。当我们将一个大整数转换为 Number 类型时,可能会导致精度丢失,因为 Number 类型最大只能表示 2^53 - 1。
我们可以使用 Number.MAX_SAFE_INTEGER
来判断一个数字是否安全,例如:
const bigNum = 123456789012345678901234567890n; if (bigNum > Number.MAX_SAFE_INTEGER) { console.log('The number is not safe.'); } else { console.log('The number is safe.'); }
如果需要将 BigInt 转换为 Number 类型,可以使用 Number()
函数,例如:
const bigNum = 123456789012345678901234567890n; const num = Number(bigNum);
当 BigInt 转换为 Number 时,如果超出了 Number 类型的精度范围,会返回 Infinity
。
如果需要将 Number 转换为 BigInt 类型,可以使用 BigInt()
函数,例如:
const num = 123456789; const bigNum = BigInt(num);
示例代码
下面是一个使用 BigInt 类型进行大整数运算的示例代码:
-- -------------------- ---- ------- ----- - - -------------------------------- ----- - - -------------------------------- ----- --- - - - -- ----- ---------- - - - -- ----- ------- - - - -- ----- -------- - - - -- ----- --------- - - - -- ----------------- --------- ------------------------ ---------------- --------------------- ------------- ---------------------- -------------- ----------------------- ---------------
运行结果:
Sum: 1111111111111111110011111111100n Difference: -86419753208641975320740740720n Product: 12193263113702179520098736817920934745751628086300462300n Quotient: 0n Remainder: 123456789012345678901234567890n
总结
ECMAScript 2020(ES11)中新增了 BigInt 类型,可以用来表示任意大的整数。使用 BigInt 类型时需要注意精度问题,可以使用前缀 n
或 BigInt()
函数将一个数字转换为 BigInt 类型。BigInt 类型的运算符与 Number 类型的运算符相同,只是需要在运算符前加上 n
。在 BigInt 和 Number 之间进行转换时需要注意精度问题,可以使用 Number()
或 BigInt()
函数进行转换。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65f60fa22b3ccec22fe222a3