BigInt是一种无符号整数类型,它可以表示任何正整数,包括无限大和无限小。
JavaScript 中的BigInt利用二进制表示法,因此它的值是无限的,并且永久不会溢出或产生舍入偏差。

要创建BigInt工具,可以利用Number.bigInt方法。
例如,以下代码将创建一个非常大的整数:

let bigInt = Number.bigInt(232 + 1);

在这个例子中,232 + 1是一个非常大的整数,它可以利用 32 位二进制表示。
Number.bigInt方法将返回一个BigInt工具,可以表示这个非常大的整数。

phpbiginttoarrayJS根本数据类型BigInt Python

如何创建 BigInt ?

可以用在一个整数字面量后面加 n 的办法定义一个 BigInt ,如:120n,或者调用函数BigInt()。

const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);console.log(theBiggestInt, alsoHuge);// 9007199254740991n 9007199254740991n安全整数的范围

超过这个范围,number类型的数字将会失落去精度

Number.MAX_SAFE_INTEGER// ↪ 99007199254740991 最大安全整数Number.MIN_SAFE_INTEGER// ↪ -99007199254740991 最小安全整数如何利用BigInt可以用在一个整数字面量后面加 n 的办法定义一个 BigInt ,如:10n,或者调用布局函数 BigInt()(不能利用 new 运算符)并通报一个整数值或字符串值。

const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");// ↪ 9007199254740991nconst hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");// ↪ 9007199254740991nBigInt类型判断

typeof 123// ↪ 'number'typeof 123n// ↪ 'bigint'typeof BigInt(123)// ↪ ''bigint'BigInt运算

但是BigInt不支持单独利用运算符+,由于会默认为转换成Number,这是不许可的。

const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);// ↪ 9007199254740991nconst maxPlusOne = previousMaxSafe + 1n;// ↪ 9007199254740992nconst theFuture = previousMaxSafe + 2n;// ↪ 9007199254740993n, this works now!const multi = previousMaxSafe 2n;// ↪ 18014398509481982nconst subtr = multi – 10n;// ↪ 18014398509481972nconst mod = multi % 10n;// ↪ 2nconst bigN = 2n 54n;// ↪ 18014398509481984nbigN -1n// ↪ –18014398509481984nconst expected = 4n / 2n;// ↪ 2nconst rounded = 5n / 2n;// ↪ 2n, not 2.5nBigInt比较大小

// 不严格相等,严格不相等0n === 0// ↪ false0n == 0// ↪ true// Number 和 BigInt 可以直接比较。
1n < 2// ↪ true2n > 1// ↪ true2 > 2// ↪ false2n > 2// ↪ false2n >= 2// ↪ true// BigInt可以和Number混入数组中进行排序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]
BigInt无法利用JSON.stringify()方法

对任何 BigInt 值利用 JSON.stringify() 都会引发 TypeError,由于默认情形下 BigInt 值不会在 JSON 中序列化。
但是,如果须要,可以实现 toJSON 方法:

BigInt.prototype.toJSON = function() { return this.toString(); }// 现在可以JSON.stringify(BigInt(1));// ↪ '"1"'

须要把稳的是,BigInt工具是不可变的,也便是说,一旦创建,就无法变动其值。
如果须要变动BigInt工具的值,必须创建一个新的BigInt工具。

BigInt工具在 JavaScript 中紧张用于处理非常大的整数,例如在密码学和安全方面。

总结BigInt不能和Number类型数据稠浊运算,两者必须转换成同一种数据类型。
BigInt和Number联众类型相互转换时,要把稳可能会丢失精度BigInt和Numner可以直接作大小比较。
BigInt可以和大部分运算符一起利用,除了单独利用+,由于会默认逼迫转化类型。
BigInt作为条件判断转为Boolean时,和Number类型同等。
默认情形下BigInt无法在JSON中序列化bignumber.js 也是一种处理最大安全整数的方法BigInt不能调用Math中的方法