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 และ Number ซึ่งจะทำให้สูญเสียข้อมูล:
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 ตัวเลขทั้งหมดของบราวเซอร์สนับสนุน BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
พฤษภาคม 2018 ปี | มกราคม 2020 ปี | กรกฎาคม 2019 ปี | กันยายน 2020 ปี | มิถุนายน 2018 ปี |
ตัวเลขที่ปลอดภัยที่สุดและต่ำที่สุด
ES6 ยังเพิ่ม max และ min ของตัวเลข:
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