在 JavaScript 中,最大的安全整数是 2 的 53 次方减 1,即 Number.MAX_SAFE_INTEGER,其值为 9007199254740991。这是因为 JavaScript 中使用双精度浮点数表示数字,双精度浮点数的符号位占 1 位,指数位占 11 位,尾数位占 52 位,因此能够准确表示的整数范围是有限的。超过这个范围的整数可能会失去精度。
console.log(2 ** 53 - 1);
console.log(Number.MAX_SAFE_INTEGER);
console.log(2 ** 53 + 1);
console.log(2 ** 53 + 2);
console.log(2 ** 53 + 3);
console.log(2 ** 53 + 4);
● 可以看到,超过这个精度,整数的精度就会丢失,可能会出现一些问题
BigInt
BigInt 是 JavaScript 中引入的一种新的数据类型,用于表示任意精度的整数。与普通的数字类型不同,BigInt 可以表示超出 Number.MAX_SAFE_INTEGER 的整数值,因此它可以用于处理非常大的整数,而不会丢失精度。
要创建 BigInt,可以在整数值后面添加 n 或调用 BigInt() 函数并将整数作为参数传递。
console.log(5648941287894651132156549781132n);
console.log(BigInt('5648941287894651132156549781132'));
● Biglnt不能和普通的数字进行混合运算,只能使用Biglnt类型进行运算
console.log(10000n + 10000n);
console.log(45612316546871512315645487n * 312121100n);
console.log(45612316546871512315645487 * 312121100n);
● 比较运算符
console.log(20n > 15);
console.log(20n === 20); //===不会做强制类型转换
console.log(typeof 20n); //类型为biglnt
console.log(20n == '20'); //==不会严格比较
● 取余
console.log(11n / 3n); //会省略小数部分
console.log(11 / 3);