【前端面试小册】说说BigInt

101 阅读2分钟

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