JavaScript BigInt
Các biến BigInt
của JavaScript được sử dụng để lưu trữ các giá trị số nguyên lớn quá lớn để được biểu thị bằng Number
JavaScript thông thường.
Độ chính xác của số nguyên JavaScript
Số nguyên JavaScript chỉ chính xác tối đa 15 chữ số:
Trong JavaScript, tất cả các số được lưu trữ ở định dạng dấu phẩy động 64 bit (tiêu chuẩn IEEE 754).
Với tiêu chuẩn này, số nguyên lớn không thể được biểu diễn chính xác và sẽ được làm tròn.
Vì điều này, JavaScript chỉ có thể biểu diễn số nguyên một cách an toàn:
Lên tới 9007199254740991 +(2 53 -1)
Và
Xuống tới -9007199254740991 -(2 53 -1).
Các giá trị số nguyên ngoài phạm vi này sẽ mất độ chính xác.
Cách tạo BigInt
Để tạo BigInt
, hãy thêm n vào cuối số nguyên hoặc gọi BigInt()
:
Ví dụ
let x = 9999999999999999;
let y = 9999999999999999n;
Hãy tự mình thử »
let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)
Hãy tự mình thử »BigInt: Kiểu dữ liệu JavaScript mới
typeof
JavaScript của BigInt
là "bigint":
BigInt
là kiểu dữ liệu số thứ hai trong JavaScript (sau Number
).
Với BigInt
tổng số loại dữ liệu được hỗ trợ trong JavaScript là 8:
1. Chuỗi
2. Số
3. Bigint
4. Boolean
5. Không xác định
6. Không
7. Biểu tượng
8. Đối tượng
Toán tử BigInt
Các toán tử có thể được sử dụng trên Number
JavaScript cũng có thể được sử dụng trên BigInt
.
Ví dụ về phép nhân BigInt
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
Hãy tự mình thử »Ghi chú
Không được phép tính số học giữa BigInt
và Number
(chuyển đổi loại sẽ mất thông tin).
Không thể thực hiện dịch chuyển phải chưa được ký (>>>) trên BigInt
(nó không có chiều rộng cố định).
Số thập phân BigInt
BigInt
không thể có số thập phân.
Ví dụ về phân chia 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;
Hãy tự mình thử »BigInt Hex, bát phân và nhị phân
BigInt
cũng có thể được viết bằng ký hiệu thập lục phân, bát phân hoặc nhị phân:
Ví dụ về BigInt Hex
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
Hãy tự mình thử »Sự tò mò chính xác
Làm tròn có thể ảnh hưởng đến bảo mật chương trình:
Hỗ trợ trình duyệt
BigInt
được hỗ trợ trên tất cả các trình duyệt kể từ tháng 9 năm 2020:
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
May 2018 | Jan 2020 | Jul 2019 | Sep 2020 | Jun 2018 |
Số nguyên an toàn tối thiểu và tối đa
ES6 đã thêm thuộc tính max và min vào đối tượng Number:
-
MAX_SAFE_INTEGER
-
MIN_SAFE_INTEGER
Phương pháp số mới
ES6 cũng thêm 2 phương thức mới vào đối tượng Number:
-
Number.isInteger()
-
Number.isSafeInteger()
Phương thức Number.isInteger()
Phương thức Number.isInteger()
trả về true
nếu đối số là số nguyên.
Phương thức Number.isSafeInteger()
Số nguyên an toàn là số nguyên có thể được biểu diễn chính xác dưới dạng số có độ chính xác kép.
Phương thức Number.isSafeInteger()
trả về true
nếu đối số là số nguyên an toàn.
Ví dụ isSafeInteger()
Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);
Hãy tự mình thử » Số nguyên an toàn là tất cả các số nguyên từ -(2 53 - 1) đến +(2 53 - 1).
Số này an toàn: 9007199254740991. Số này không an toàn: 9007199254740992.