1、BigInt作用
作用:解决精度问题
2、问题,精度失真
let max = Number.MAX_SAFE_INTEGER
let max1 = max+1
let max2 = max+2
console.log(max1 === max2) // true,应该为false,因为失真
3、解决精度失真办法
let max = BigInt(Number.MAX_SAFE_INTEGER);
let max1 = max + 1n
let max2 = max + 2n
max1 === max2 // false
BigInt使用
+、、-、*、%都可用,但是不可用无符号位运算,BigInt 都是有符号的
const a = BigInt(1);
const b = BigInt(1);
console.log(a);// 1n
console.log(b);// 1n
console.log(b + a); // 2n
4、BigInt方法
4.1、与Number比较
1n < 2; // true
2n > 1; // true
2 > 2; // false
2n > 2; // false
2n == 2; // true
2n === 2; // false
4.2、BigInt 和 Number 不是严格相等的,但是宽松相等的
10n === 10
// false
10n == 10
// true
4.3、可混合排序
sort默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的
const mixed = [4n, 6, -12n, 10, 4, 0, 0n]; // [4n, 6, -12n, 10, 4, 0, 0n]
mixed.sort(); // [-12n, 0, 0n, 10, 4n, 4, 6]
4.4、不允许隐式类型转换
// 因为隐式类型转换可能丢失信息,所以不允许在bigint和 Number 之间进行混合操作。
//当混合使用大整数和浮点数时,结果值可能无法由BigInt或Number精确表示。
10n + 1; // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
Math.max(2n, 4n, 6n); // TypeError...
4.5、BigInt和String
难免会遇到数字和字符串的转换,BigInt也不例外,不过可惜的是BigInt转为String时,其标志性的n会被省略
String(10n); // '10'
'' + 11n; // '11'
4.6、 零值
BigInt 没有 Number 的正零(+0)和负零(-0)之分。因为 BigInt 表示的是整数
4.7、 无穷和NaN判断
isFinite(10n); // Uncaught TypeError: Cannot convert a BigInt value to a number
Number.isFinite(10n); // false
isNaN(10n); // Uncaught TypeError: Cannot convert a BigInt value to a number
Number.isNaN(10n); // false
其他
7年前端的【前端面试小册】免费持续分享中; 拿过offer有:美团、滴滴、快手、阿里、腾讯、百度、拼多多、银行等offer