Trong JavaScript, BigInt được sử dụng để lưu trữ các giá trị số nguyên lớn quá lớn để được biểu diễn bằng kiểu số thông thường.
Độ Chính Xác Của Số Nguyên Trong JavaScript
Số nguyên trong JavaScript chỉ chính xác đến 15 chữ số:
let x = 999999999999999; // Đúng
let y = 9999999999999999; // Sai
Tất cả các số trong JavaScript đều được lưu trữ theo định dạng số thực 64-bit (tiêu chuẩn IEEE 754). Đối 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ẽ bị làm tròn.
JavaScript chỉ có thể biểu diễn số nguyên an toàn:
- Lên đến 9007199254740991 (2^(53-1))
- Xuống đến -9007199254740991 (-(2^(53-1)))
Các giá trị số nguyên nằm ngoài phạm vi này sẽ mất độ chính xác.
Cách Tạo BigInt
Để tạo một BigInt, bạn có thể thêm n vào cuối số nguyên hoặc sử dụng hàm BigInt():
let x = 9999999999999999;
let y = 9999999999999999n;
let z = BigInt(1234567890123456789012345);
BigInt là một kiểu dữ liệu số thứ hai trong JavaScript (sau Number). Với BigInt, tổng số kiểu dữ liệu được hỗ trợ trong JavaScript là 8:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
Toán Tử BigInt
Các toán tử có thể được sử dụng trên một số JavaScript cũng có thể được sử dụng trên một BigInt.
Ví dụ về nhân BigInt:
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
Lưu ý rằng phép toán giữa BigInt và một số không được phép (chuyển đổi kiểu sẽ mất thông tin).
Không thể sử dụng dịch phải không dấu (>>>) trên BigInt (vì nó không có chiều rộng cố định).
Định Dạng Hex, Octal và Binary của BigInt
BigInt cũng có thể được viết theo cách thức thập lục phân, bát phân hoặc nhị phân:
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
Hỗ Trợ Trình Duyệt và Giới Hạn An Toàn Tối Thiểu và Tối Đa
BigInt được hỗ trợ trên tất cả các trình duyệt kể từ tháng 9 năm 2020.
Giới hạn an toàn tối đa và tối thiểu đã được thêm vào ES6:
- Number.MAX_SAFE_INTEGER: Giá trị an toàn tối đa
- Number.MIN_SAFE_INTEGER: Giá trị an toàn tối thiểu
Phương Thức Mới của Number
ES6 đã thêm 2 phương thức mới vào đối tượng Number:
- Number.isInteger(): Kiểm tra xem một số có phải là số nguyên không.
- Number.isSafeInteger(): Kiểm tra xem một số có phải là số nguyên an toàn không.
Ví dụ về sử dụng:
Number.isInteger(10); // true
Number.isInteger(10.5); // false
Number.isSafeInteger(10); // true
Number.isSafeInteger(12345678901234567890); // false
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ố thực độ chính xác kép.
Tổng Kết
Như vậy, BigInt mang lại tính linh hoạt và độ chính xác cao cho việc xử lý số nguyên lớn trong JavaScript. Đặc biệt, nó là một công cụ mạnh mẽ khi bạn cần làm việc với các số nguyên vượt quá giới hạn chính xác của kiểu dữ liệu số thông thường.