js中的BigInt

文章类型:Javascript

发布者:admin

发布时间:2023-04-16

一:原因

1:所有的数字都以双精度64位浮点格式

2:Number无法精确表示非常大的整数,四舍五入,Math.pow(2, 53) ,只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991((2^53-1)),任何超出此范围的整数值都可能失去精度

console.log(999999999999999);  //=>10000000000000000
9007199254740992 === 9007199254740993; // → true 居然是true!

二:定义

BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时,这种数据类型允许我们安全地对大整数执行算术操作,

console.log( 9007199254740995n );    // → 9007199254740995n	
console.log( 9007199254740995 ); // → 9007199254740996
BigInt("9007199254740995"); // → 9007199254740995n
10n + 20n; // → 30n

三:注意点

1:不支持一元加号运算符

10 + 10n;    // → TypeError

2:不能将BigInt传递给Web api和内置的 JS 函数

Math.max(2n, 4n, 6n);    // → TypeError

3:当 Boolean 类型与 BigInt 类型相遇时,只要不是0n,BigInt就被视为true

if(0n){//条件判断为false

}
if(3n){//条件为true

}

4:兼容性不好