BigInt của JavaScript
- Trang trước Số JS
- Trang tiếp theo Phương pháp số JS
Biến BigInt trong JavaScript được sử dụng để lưu trữ các giá trị số nguyên lớn hơn không thể biểu diễn bằng số nguyên JavaScript thông thường.
Độ chính xác số nguyên trong JavaScript
Số nguyên trong JavaScript chỉ có thể chính xác đến 15 chữ số:
Độ chính xác số nguyên
let x = 999999999999999; let y = 9999999999999999;
Trong JavaScript, tất cả các số đều được lưu trữ dưới dạng số thập phân 64 bit (tiêu chuẩn IEEE 754).
Theo tiêu chuẩn này, các số nguyên lớn không thể được biểu diễn chính xác và sẽ bị làm tròn.
Do đó, JavaScript chỉ có thể biểu diễn chính xác các số nguyên trong phạm vi sau:
- thuộc về 9007199254740991(253-1)
- thuộc về -9007199254740991(-(253-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, bạn có thể thêm n
hoặc gọi BigInt()
Hàm:
Ví dụ 1
let x = 9999999999999999; let y = 9999999999999999n;
Ví dụ 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt: Một loại dữ liệu mới trong JavaScript
Loại dữ liệu JavaScript của BigInt là "bigint
:
Ví dụ
let x = BigInt(999999999999999); let type = typeof x;
BigInt là loại dữ liệu số thứ hai trong JavaScript (sau Number).
Đối với BigInt, JavaScript hỗ trợ tổng số loại dữ liệu là 8 loại:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
Toán tử BigInt
Các toán tử có thể sử dụng cho Number trong JavaScript cũng có thể sử dụng cho BigInt.
Ví dụ về phép nhân BigInt
let x = 9007199254740995n; let y = 9007199254740995n; let z = x * y;
Lưu ý
Không được phép thực hiện toán tử tính toán (chuyển đổi loại) giữa BigInt và Number (thông tin sẽ bị mất).
BigInt không thể thực hiện thao tác dịch chuyển phải không dấu (>>>), vì nó không có độ rộng cố định.
Số thập phân của BigInt
BigInt không thể có số thập phân.
Mô hình chia số BigInt
let x = 5n; let y = x / 2; // Lỗi: Không thể trộn BigInt và các loại khác, sử dụng chuyển đổi rõ ràng.
let x = 5n; let y = Number(x) / 2;
BigInt hệ số mười sáu, tám và hai
BigInt cũng có thể được viết dưới dạng hệ số mười sáu, tám hoặc hai:
Mô hình BigInt bằng hệ số mười sáu
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
Precision Curiosity
Việc làm tròn có thể đe dọa an toàn của chương trình:
Mô hình MAX_SAFE_INTEGER
9007199254740992 === 9007199254740993; // Đúng !!!
Hỗ trợ trình duyệt
Từ tháng 9 năm 2020 trở đi, tất cả các trình duyệt đều hỗ trợ BigInt:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
Tháng 5 năm 2018 | Tháng 1 năm 2020 | Tháng 7 năm 2019 | Tháng 9 năm 2020 | Tháng 6 năm 2018 |
Số nguyên an toàn lớn nhất và nhỏ nhất
ES6 cũng thêm các thuộc tính max và min cho đối tượng Number:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
Mô hình MAX_SAFE_INTEGER
let x = Number.MAX_SAFE_INTEGER;
Mô hình MIN_SAFE_INTEGER
let x = Number.MIN_SAFE_INTEGER;
Các phương pháp số mới
ES6 cũng thêm hai phương pháp mới cho đối tượng Number:
Number.isInteger()
Number.isSafeInteger()
Phương thức Number.isInteger()
Nếu tham số là số nguyên, thì phương thức Number.isInteger() trả về true
.
Ví dụ isInteger()
Number.isInteger(10); Number.isInteger(10.5);
Phương thức Number.isSafeInteger()
Số nguyên tố an toàn là các số nguyên có thể biểu diễn chính xác bằng số thập phân kép.
Nếu tham số là số nguyên tố an toàn, thì phương thức Number.isSafeInteger() trả về true
.
Ví dụ isSafeInteger()
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
Số nguyên tố an toàn là từ -(253 - 1) đến +(253 - 1) tất cả các số nguyên.
Đây là một số nguyên tố an toàn: 9007199254740991. Đây không phải là một số nguyên tố an toàn: 9007199254740992.
- Trang trước Số JS
- Trang tiếp theo Phương pháp số JS