BigInt JavaScript

JavaScript BigInt 变量用于存储太大而无法用普通 JavaScript 数字表示的大整数值。

JavaScript 整数精度

JavaScript 整数最多只能精确到 15 位:

整数精度

let x = 999999999999999;
let y = 9999999999999999;

ທຳນອງທາງຄົນເອງ

在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。

根据此标准,大整数无法被精确表示,会被四舍五入。

因此,JavaScript 只能安全地表示以下范围内的整数:

  • 最大为 9007199254740991(253-1)
  • 最小为 -9007199254740991(-(253-1))

超出此范围的整数值会失去精度。

如何创建 BigInt

如需创建 BigInt,可以在整数末尾添加 n,或调用 BigInt() 函数:

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

ທຳນອງທາງຄົນເອງ

例子 2

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345);

ທຳນອງທາງຄົນເອງ

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

let x = BigInt(999999999999999);
let type = typeof x;

ທຳນອງທາງຄົນເອງ

BigInt 是 JavaScript 中的第二个数值数据类型(在 Number 之后)。

对于 BigInt,JavaScript 支持的数据类型总数为 8 种:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. Object

BigInt 运算符

可用于 JavaScript Number 的运算符也可用于 BigInt。

BigInt 乘法实例

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

ທຳນອງທາງຄົນເອງ

ຄຳເຫັນ

ບໍ່ອະນຸຍາດດຳເນີນການສາຂາທາງວິທະຍາສາດ (ການປ່ຽນຕົວຈະສາມາດສູນເສຍຂໍ້ມູນ).

BigInt ບໍ່ສາມາດດຳເນີນການປ່ຽນຕົວທີ່ບໍ່ມີລະດັບການຂະຫຍາຍຄວາມຂອງຂ້າງຫຼັງ (>>>), ຍ້ອນວ່າມັນບໍ່ມີລະດັບການຂະຫຍາຍຄວາມຂອງຂ້າງຫຼັງຄົງ:

BigInt ພາກສັນຍານ

BigInt ບໍ່ສາມາດມີພາກສັນຍານ:

ກົນລະບົບສາຂາ BigInt

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;

ທຳນອງທາງຄົນເອງ

BigInt ສາມາດຫຼິ້ນສະເໜີໃຫ້ເປັນ ສາມາດສາມາດສາມາດ:

BigInt ສາມາດຫຼິ້ນສະເໜີໃຫ້ເປັນ ສາມາດສາມາດສາມາດ:

ພິມສະຖານະ BigInt ສາມາດຫຼິ້ນສະເໜີໃຫ້ເປັນ ສາມາດສາມາດສາມາດສາມາດ:

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

ທຳນອງທາງຄົນເອງ

Precision Curiosity

ການປ່ຽນຕົວຈະສາມາດຂັດຂວາງຄວາມປອດໄພຂອງໂປຣເກຣມ:

ພິມສະຖານະ MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // ແມ່ນ true !!!

ທຳນອງທາງຄົນເອງ

ການສະໜັບສະໜູນຂອງການຄົ້ນຫາ

ຕັ້ງແຕ່ປີ 2020 ຕຸລາ 9 ທຸກການຄົ້ນຫາໄດ້ສະໜັບສະໜູນ BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
2018 ກັນຍາ 5 2020 ມັງກອນ 1 2019 ກັນຍາ 7 2020 ຕຸລາ 9 2018 ກັນຍາ 6

ວັດສະດຸທີ່ປອດໄພທີ່ນ້ອຍ ແລະ ໃຫຍ່

ES6 ຍັງໄດ້ສະເໜີລະບົບ max ແລະ min ໃຫ້ໂຕໃນ Number:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

ພິມສະຖານະ MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

ທຳນອງທາງຄົນເອງ

ພິມສະຖານະ MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

ທຳນອງທາງຄົນເອງ

ກົນລະບົບຕົວເລກໃໝ່

ES6 ຍັງໄດ້ສະເໜີສອງກົນລະບົບໃໝ່ໃຫ້ໂຕໃນ Number:

  • Number.isInteger()
  • Number.isSafeInteger()

ກົດລະບຽບ Number.isInteger()

ຖ້າປະທະກັບແມ່ນຈຳນວນ, ກົດລະບຽບ Number.isInteger() ຈະກັບຄືນ true.

ຄວາມຈິງ isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

ທຳນອງທາງຄົນເອງ

ກົດລະບຽບ Number.isSafeInteger()

ຈຳນວນທີ່ປອດໄພແມ່ນຈຳນວນທີ່ສາມາດສະແດງໄດ້ວ່າຈຳນວນທີ່ສາມາດສະແດງໄດ້ວ່າຈຳນວນທີ່ສາມາດສະແດງໄດ້

ຖ້າປະທະກັບແມ່ນຈຳນວນທີ່ປອດໄພ, ກົດລະບຽບ Number.isSafeInteger() ຈະກັບຄືນ true.

ຄວາມຈິງ isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

ທຳນອງທາງຄົນເອງ

ຈຳນວນທີ່ປອດໄພແມ່ນຈຳນວນທີ່ຈົນເຖິງ -(253 - 1) ຈົນເຖິງ +(253 - 1) ທຸກຈຳນວນ.

ນັ້ນແມ່ນຈຳນວນທີ່ປອດໄພ: 9007199254740991. ນັ້ນບໍ່ແມ່ນຈຳນວນທີ່ປອດໄພ: 9007199254740992.