ES2020 新增了 BigInt 数据类型,用于解决在 JavaScript 中运算超过 2 的 53 次方所能表示的数字时出现的精度误差问题。BigInt 类型可以表示任意大小的整数,是一个非常实用的新特性。本文将详细介绍 BigInt 的使用方法以及一些注意事项。
如何声明 BigInt 变量
声明一个 BigInt 变量的方法很简单,只需要在数字后面添加 n
或者使用 BigInt()
函数进行转换即可。
const a = 123456789012345678901234567890n; const b = BigInt("123456789012345678901234567890");
需要注意的是,BigInt 类型和 Number 类型不能混用,否则会报错。下面是一个例子。
console.log(1n + 1); // Uncaught TypeError: Cannot mix BigInt and other types
BigInt 的运算
在 BigInt 中,可以进行 +、-、*、/、% 等基本运算,也可以进行大于(>)、小于(<)、等于(===)等比较运算。需要注意的是,在 BigInt 变量中使用运算符时,需要注意运算符左右两侧的类型是否相同。
const a = 1234567890n; const b = 9876543210n; console.log(a + b); // 11111111100n console.log(a * b); // 12193263113712398700n console.log(a > b); // false console.log(a === b); // false
BigInt 和 Number 的转换
由于 BigInt 类型和 Number 类型不能混用,因此在进行运算时需要将其转换为同一类型。其中,将 Number 转换为 BigInt 可以直接在数字后面加上 n
,将 BigInt 转换为 Number 则需要使用 Number()
函数。
需要注意的是,在将 BigInt 转换为 Number 时,如果 BigInt 变量的值超出了 JavaScript 能表示的范围,会出现精度丢失的情况,因此需要特别小心。
const a = 1234567890n; const b = BigInt(Number.MAX_SAFE_INTEGER) + 1n; console.log(Number(a)); // 1234567890 console.log(Number(b)); // 9007199254740992,精度丢失
使用 BigInt 处理大数问题
BigInt 类型可以处理 JavaScript 中无法表示的大数问题。比如,使用 BigInt 可以轻松地计算一个 1000 位的大数的阶乘。
// javascriptcn.com 代码示例 function factorial(n) { let result = 1n; for (let i = 1n; i <= n; i++) { result *= i; } return result; } console.log(factorial(1000)); // 4023872600770937735437024339230039857193748642107146325437999104299385123986290205920442084869694048004799886101971960586316668729948085589013238296699445909974245040870737599188236277271887325197795059509952761208749754624970436014182780946464962910563938874378864873371191810458257836478499770124766328898359557354325131853239584630755574091142624174743493475534286465766116677973966688202912073791438537195882498081268678383745597317461360853795345242215865932019280908782973084313928444032812315586110369768013573042161687476096758713483120254785893207671691324484262361314125087802080002616831510273418279777047846358681701643650241536913982812648102130927612448963599287051149649754199093422215668325720808213331861168115536158365469840467089756029009505376164758477284218896796462449451607653534081989013854424879849599533191017233555566021394503997362807501378376153071277619268490343526252000158885351473316117021039681759215109077880193931781141945452572238655414610628921879602230426982042335606445097242840388754641222622287105544080588799696006576397662343602565625018618239120839173823217245090405816342594721362181000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000n
总结
BigInt 类型是 ES2020 中非常重要的一个新特性,解决了在 JavaScript 中处理大数时出现的精度丢失问题。本文介绍了 BigInt 的基本用法、运算和转换方法,以及使用 BigInt 处理大数问题的示例。在实际开发中,我们可以使用 BigInt 类型来处理一些有关数字精度的问题,提高代码的可靠性和精度。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653288227d4982a6eb54bbbb