JavaScript 中的一种数据类型是长整数类型。
数值类型通常用于执行数值操作和计算,但长整数类型可以处理数值类型无法处理的大整数。
这一次,我将解释如何处理长整数类型。
长整型 (BigInt)
长整数类型是处理任意精度整数的数据类型。
在JavaScript中,所有数字都以IEEE754双精度浮点数(64 位)表示,所以可以准确处理的数字范围是有上限的。
在数值类型中可以安全处理的最大数值如下获得。
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
使用数值大于此的数值类型可能会导致结果不准确。
console.log(Number.MAX_SAFE_INTEGER + 1); // 9007199254740992 // 不会变成9007199254740993 console.log(Number.MAX_SAFE_INTEGER + 2); // 9007199254740992
因此,从 ES2020 引入了长整数类型(BigInt),使得准确表示大值成为可能。
可以通过在整数文字末尾添加n来创建长整数。
// 可以处理大于9007199254740991的值 console.log(9007199254740992n); // 9007199254740992n console.log(9007199254740993n); // 9007199254740993n
它也可以通过调用 BigInt 对象的构造函数来创建。参数可以是数字或字符串。
const num1 = BigInt(10); console.log(num1); // 10n const num2 = BigInt('10'); console.log(num2); // 10n
由于仅整数支持长整数,因此包含小数点是错误的。
// Invalid or unexpected token let num = 3.14n;
如何处理长整数
接下来我们来看一下长整数的处理模式。
算术运算符
长整数可以像数字一样用算术运算符处理。
console.log(10n + 5n); // 15n console.log(10n - 5n); // 5n console.log(10n * 5n); // 50n console.log(10n / 5n); // 2n console.log(10n % 5n); // 0n console.log(10n ** 5n); // 100000n
长整数的除法计算会截断小数点后的值。
// 注意不是2.5n console.log(5n / 2n); // 2n
不能混合使用长整数和数字。
console.log(10n + 5); // Cannot mix BigInt and other types, use explicit conversions
递增和递减运算符的使用方式与数字相同。
let num = 10n; console.log(++num); // 11n console.log(num++); // 11n num = 5n; console.log(--num); // 4n console.log(num--); // 4n
请注意,长整数可以使用一元减号运算符,但不支持一元加号运算符。
console.log(-10n); // -10n console.log(+10n); // Cannot convert a BigInt value to a number
比较运算符
除了长整数之间的比较操作,还可以比较长整数和数字。
console.log(10n > 5n); // true console.log(10n >= 8); // true
请注意,长整数和数字属于不同类型。
即使在比较相同的值时,相等比较结果为true,严格比较结果则为false。
console.log(10n == 10); // true console.log(10n === 10); // false
逻辑运算
在计算逻辑值时,长整数的行为与数字的行为相同。
if (0n) { console.log('什么都不会发生'); }
此外,使用AND和OR运算符进行短路求值的方式与数值相同。
console.log(10n && 5n); // 5n console.log(0n && 5n); // 0n console.log(10n || 5n); // 10n console.log(0n || 5n); // 5n
长整数和数字之间的转换
一元加运算符是一种将非数字值转换为数字的方法。
长整数不支持一元加运算符,这会造成混淆。
因此,如果要将长整数转换为数字,可以使用Number()。如果要将数字转换为长整数,则使用BigInt()。
let bigint = 10n; let num = 5; console.log(Number(10n)); // 10 console.log(BigInt(num)); // 5n
结语
这一次,我解释了如何处理长整数类型。
//重点
长整数类型是处理任意精度整数的数据类型
可以处理大于9007199254740991的值
在处理运算符和逻辑值时,大部分情况下和数值的行为相同
可以用BigInt()或Number()将长整数和数值相互转换