Skip to main content

新增基本类型 BigInt

一、BigInt 的定义

ES10 新增的第七种基本数据类型,用来处理超过 2 的 53 次方以外的数。

const a = 11n

console.log(a) // 11n
console.log(typeof a) // bigint 是数字,可以进行运算

二、BigInt 的属性

1、BigInt.asIntN()

BigInt.asIntN(width, bigint);

功能:将 BigInt 值转换为一个 -2width-1 与 2width-1-1 之间的有符号整数。

参数:

  • width(必须):可存储整数的位数。
  • bigint(必须):要存储在指定位数上的整数。

返回值:bigint 模(modulo) 2width 作为有符号整数的值。

示例:

// 保持在64位范围内
const max = 2n ** (64n - 1n) - 1n;

BigInt.asIntN(64, max);
// ↪ 9223372036854775807n

BigInt.asIntN(64, max + 1n);
// ↪ -9223372036854775808n
// negative because of overflow

2、BigInt.asUintN()

BigInt.asUintN(width, bigint);

功能:将 BigInt 转换为一个 0 和 2width-1 之间的无符号整数。

参数:

  • width(必须):可存储整数的位数。
  • bigint(必须):要存储在指定位数上的整数。

返回值:bigint 模(modulo) 2width 作为无符号整数的值。

示例:

// 保持在64位范围内
const max = 2n ** 64n - 1n;

BigInt.asUintN(64, max);
// ↪ 18446744073709551615n

BigInt.asUintN(64, max + 1n);
// ↪ 0n
// zero because of overflow

3、BigInt.prototype.toString()

bigIntObj.toString([radix])

功能:返回一个字符串,表示指定 BigInt 对象。后面的 "n" 不是字符串的一部分。

参数:radix(可选):介于 2 到 36 之间的整数,指定用于表示数值的基数。

返回值:表示指定 BigInt 对象的字符串。

示例:

console.log(1024n.toString());
// "1024"

console.log(1024n.toString(2));
// "10000000000"

console.log(1024n.toString(16));
// "400"

4、BigInt.prototype.toLocaleString()

bigIntObj.toLocaleString([locales [, options]])

功能:返回一个字符串,该字符串具有此 BigInt 的 language-sensitive 表达形式。

参数:

  • locales(可选):缩写语言代码。
  • options(可选):一些特定属性的类:

返回值:

具有此 BigInt 的 language-sensitive 表示形式的字符串。

示例:

const bigint = 123456789123456789n;

console.log(bigint.toLocaleString('de-DE'));
// "123.456.789.123.456.789"

console.log(bigint.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
// "123.456.789.123.456.789,00 €"

5、BigInt.prototype.valueOf()

bigIntObj.valueOf()

功能:返回 BigInt 对象包装的原始值。

参数:

返回值:指定 BigInt 对象的原始 BigInt 值。

示例:

console.log(typeof Object(1n));
// "object"

console.log(typeof Object(1n).valueOf());
// "bigint"