BigInt JavaScript
- ການໄປບ່ອນໃນຫຼັງ JS ການຕີງຕາມ
- ການໄປບ່ອນໃນຕໍ່ໄປ ການປະພຶດ JS
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 种:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- 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.
- ການໄປບ່ອນໃນຫຼັງ JS ການຕີງຕາມ
- ການໄປບ່ອນໃນຕໍ່ໄປ ການປະພຶດ JS