ES2020 是 ECMAScript 提案的最新版本,其中最引人注目的变化之一就是引入了 BigInt。BigInt 是一种新的 JavaScript 数据类型,可以处理超过 Number 类型最大值范围的整数。
在本篇文章中我们将详细分析 BigInt 数据类型,并学习如何使用它。
什么是 BigInt?
BigInt 是一个全新的原生数据类型,可以表示任意精度的整数,也就是说可以处理比 Number 类型更大、更精确的整数。目前,最大的 Number 整数值是 2 的 53 次方(9007199254740992),而 BigInt 可以处理的最大值则远远超过这个范围。
如何定义一个 BigInt?
要定义一个 BigInt,只需要在数字后面加上 n 或者使用 BigInt() 函数将数字转换为 BigInt 类型。
以下是两种定义 BigInt 的方式:
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt(1234567890123456789012345678901234567890);
需要注意的是,在数字后面添加 n 是最常用的一种定义方式。这是因为使用 BigInt() 函数转换成 BigInt 类型的方式会丢失精度。
BigInt 的运算
BigInt 可以使用与 Number 类型相同的运算符,但是由于它是一个全新的数据类型,因此需要遵守一些规则。
加、减、乘
以下是 BigInt 加、减、乘的运算规则:
const bigInt1 = 1234567890n; const bigInt2 = BigInt(9876543210); console.log(bigInt1 + bigInt2); // 11111111100n console.log(bigInt1 - bigInt2); // -8641975320n console.log(bigInt1 * bigInt2); // 12193263113754689000n
需要注意的是,运算符左右两侧必须都是 BigInt,否则会抛出异常。
除与取模
BigInt 支持除法运算,但是需要注意:由于除法运算获取的结果可能会得到小数部分,因此 BigInt 并不支持浮点数的除法。如果进行除法运算得到的结果是一个小数,BigInt 会将小数部分直接截去。
以下是 BigInt 除法运算以及取模的运算规则:
const bigInt1 = 9876543210n; const bigInt2 = BigInt(1234567890); console.log(bigInt1 / bigInt2); // 8n console.log(bigInt1 % bigInt2); // 2469135120n
同样地,在除法和取模运算中,运算符左右两侧必须都是 BigInt。
BigInt 与 Number 的比较
在 BigInt 和 Number 之间进行比较时,需要注意以下规则:
- 如果操作符两侧都是 BigInt,则进行 BigInt 之间的比较;
- 如果操作符两侧都是 Number,则进行 Number 之间的比较;
- 如果操作符两侧分别是 BigInt 和 Number,则会将 Number 自动转换为 BigInt 进行比较。
以下是 BigInt 与 Number 的比较的运算规则:
const bigInt1 = 100n; const bigInt2 = BigInt(100); const number1 = 100; console.log(bigInt1 === bigInt2); // true console.log(bigInt1 === number1); // false console.log(bigInt1 > number1); // true console.log(bigInt2 > number1); // true
需要注意的是,如果在进行比较时,BigInt 和 Number 的值相同,但是数据类型不同,则会返回 false。
BigInt 与 JSON
如果需要将一个 BigInt 对象转换为 JSON 的格式,需要使用 toJSON() 方法。这是因为 JSON 无法处理 BigInt 数据类型,JSON 将 BigInt 对象转换为 null。
以下是 BigInt 与 JSON 的转换规则:
const bigInt1 = 1234567890123456789012345678901234567890n; const object1 = { bigInt: bigInt1 }; console.log(JSON.stringify(object1)); // {"bigInt":null} const object2 = { bigInt: bigInt1.toJSON() }; console.log(JSON.stringify(object2)); // {"bigInt":"1234567890123456789012345678901234567890"}
应用示例
下面是一个简单的应用示例,计算阶乘。由于阶乘的结果很容易超出 JavaScript 的 Number 类型的范围,因此需要使用 BigInt 处理:
// javascriptcn.com 代码示例 function factorial(n) { if (n === 1n) { return 1n; } else { return n * factorial(n - 1n); } } console.log(factorial(100n)); // 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000n
总结
在本文中,我们详细地学习了 BigInt 数据类型的使用方法,了解了它的特性和运算规则。同时,我们也学习了 BigInt 与 Number 之间的比较规则以及如何将 BigInt 转换为 JSON 格式。
由于 BigInt 处理的是超过 Number 类型最大值范围的整数,因此在进行大型的计算和数据处理时,BigInt 可以发挥出其优势。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653241257d4982a6eb4ac132