Thuộc tính của Number trong JavaScript
Javascript căn bản | by
Trong JavaScript, Number là kiểu dữ liệu được sử dụng để biểu diễn cả số nguyên và số thực. Khác với một số ngôn ngữ lập trình khác, JavaScript không phân biệt giữa số nguyên (int
) và số thực (float
), tất cả đều thuộc kiểu Number
.
Tuy nhiên, khi làm việc với số, lập trình viên có thể gặp phải nhiều vấn đề như giới hạn giá trị, lỗi chính xác khi xử lý số thực, hoặc các phép toán không hợp lệ dẫn đến kết quả NaN (Not-a-Number). Để giúp quản lý và xử lý số hiệu quả hơn, JavaScript cung cấp nhiều thuộc tính hữu ích trong đối tượng Number, chẳng hạn như MAX_VALUE
, MIN_VALUE
, POSITIVE_INFINITY
, NaN
, EPSILON
, v.v.
Các thuộc tính này đóng vai trò quan trọng trong việc kiểm tra, so sánh và xử lý số liệu chính xác. Chúng được ứng dụng rộng rãi trong nhiều lĩnh vực, từ tính toán tài chính, xử lý dữ liệu lớn, mã hóa, đến phát triển game và khoa học dữ liệu. Việc hiểu và sử dụng đúng các thuộc tính của Number
giúp lập trình viên tránh lỗi và tối ưu hiệu suất cho ứng dụng của mình.
Các thuộc tính của Number trong JavaScript
Trong JavaScript, Number
là một đối tượng tích hợp sẵn chứa nhiều thuộc tính hữu ích để làm việc với số. Dưới đây là danh sách các thuộc tính quan trọng của Number
, cùng với mô tả chi tiết và ví dụ minh họa.
Number.MAX_VALUE
Mô tả:
Đây là giá trị số lớn nhất có thể được biểu diễn trong JavaScript. Nếu một số vượt quá giá trị này, nó sẽ trở thành Infinity
.
Ví dụ minh họa:
console.log(Number.MAX_VALUE); // Output: 1.7976931348623157e+308 (≈ 1.8 × 10³⁰⁸) console.log(Number.MAX_VALUE * 2); // Output: Infinity (vì vượt quá giới hạn)
Number.MIN_VALUE
Mô tả:
Đây là số dương nhỏ nhất có thể biểu diễn trong JavaScript (≈ 5 × 10⁻³²⁴). Lưu ý rằng nó không phải là số âm nhỏ nhất, mà là số dương gần bằng 0 nhất có thể có.
Ví dụ minh họa:
console.log(Number.MIN_VALUE); // Output: 5e-324 (≈ 5 × 10⁻³²⁴) console.log(Number.MIN_VALUE > 0); // Output: true (vì đây là số dương)
Number.POSITIVE_INFINITY
Mô tả:
Đại diện cho giá trị dương vô cực (Infinity
). Nếu một số lớn hơn Number.MAX_VALUE
, JavaScript sẽ tự động chuyển nó thành Infinity
.
Ví dụ minh họa:
console.log(1 / 0); // Output: Infinity console.log(Number.MAX_VALUE * 2); // Output: Infinity console.log(Number.POSITIVE_INFINITY > Number.MAX_VALUE); // Output: true
Number.NEGATIVE_INFINITY
Mô tả:
Đại diện cho giá trị âm vô cực (-Infinity
). Nếu một số nhỏ hơn Number.MIN_VALUE
, JavaScript sẽ gán nó là -Infinity
.
Ví dụ
console.log(-1 / 0); // Output: -Infinity console.log(-Number.MAX_VALUE * 2); // Output: -Infinity console.log(Number.NEGATIVE_INFINITY < -Number.MAX_VALUE); // Output: true
Number.NaN
(Not-a-Number)
Mô tả:
Đại diện cho giá trị không phải số hợp lệ (NaN
). Xuất hiện khi thực hiện phép toán không hợp lệ, chẳng hạn như nhân chuỗi với số.
Ví dụ minh họa:
console.log("abc" * 10); // Output: NaN console.log(0 / 0); // Output: NaN console.log(isNaN("hello")); // Output: true (vì "hello" không thể chuyển thành số)
Number.EPSILON
Mô tả:
EPSILON
là giá trị chênh lệch nhỏ nhất giữa hai số dấu chấm động có thể phân biệt trong JavaScript. Điều này rất hữu ích khi so sánh số thực, vì trong máy tính, phép toán số thực có thể không chính xác.
Ví dụ minh họa:
console.log(0.1 + 0.2 === 0.3); // Output: false (do lỗi số thực) console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON); // Output: true (vì chênh lệch nhỏ hơn sai số cho phép)
Number.MAX_SAFE_INTEGER
Mô tả:
Đây là số nguyên lớn nhất có thể biểu diễn chính xác trong JavaScript, tương đương 2^53 - 1
(9007199254740991).
Ví dụ minh họa
console.log(Number.MAX_SAFE_INTEGER); // Output: 9007199254740991 console.log(Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2); // Output: true (vì mất độ chính xác)
Number.MIN_SAFE_INTEGER
Mô tả:
Đây là số nguyên nhỏ nhất có thể biểu diễn chính xác trong JavaScript, tương đương -(2^53 - 1)
(-9007199254740991).
Ví dụ minh họa:
console.log(Number.MIN_SAFE_INTEGER); // Output: -9007199254740991 console.log(Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2); // Output: true (vì mất độ chính xác)
Thuộc tính | Giá trị & Ý nghĩa |
---|---|
Number.MAX_VALUE |
Số lớn nhất có thể biểu diễn (~1.8 × 10³⁰⁸) |
Number.MIN_VALUE |
Số dương nhỏ nhất có thể biểu diễn (~5 × 10⁻³²⁴) |
Number.POSITIVE_INFINITY |
Đại diện cho dương vô cực |
Number.NEGATIVE_INFINITY |
Đại diện cho âm vô cực |
Number.NaN |
Đại diện cho giá trị không hợp lệ (Not-a-Number) |
Number.EPSILON |
Sai số nhỏ nhất giữa hai số dấu chấm động |
Number.MAX_SAFE_INTEGER |
Số nguyên lớn nhất có thể biểu diễn chính xác (2⁵³ - 1) |
Number.MIN_SAFE_INTEGER |
Số nguyên nhỏ nhất có thể biểu diễn chính xác (-2⁵³ + 1) |
Các lỗi thường gặp khi làm việc với thuộc tính Number trong JavaScript
Khi làm việc với số trong JavaScript, có một số lỗi phổ biến có thể xảy ra do giới hạn của kiểu dữ liệu Number
. Dưới đây là ba lỗi thường gặp và cách khắc phục chúng.
Lỗi khi làm việc với số vượt quá MAX_SAFE_INTEGER
Nguyên nhân
- Trong JavaScript, số nguyên lớn nhất có thể được biểu diễn chính xác là
Number.MAX_SAFE_INTEGER
(9007199254740991). - Nếu một số vượt quá giá trị này, các phép toán số học có thể không chính xác.
Ví dụ lỗi
console.log(Number.MAX_SAFE_INTEGER); // Output: 9007199254740991 console.log(Number.MAX_SAFE_INTEGER + 1); // Output: 9007199254740992 (Đúng) console.log(Number.MAX_SAFE_INTEGER + 2); // Output: 9007199254740992 (Sai! Lẽ ra phải là 9007199254740993)
Lỗi xảy ra vì các số nguyên lớn hơn Number.MAX_SAFE_INTEGER
không thể được lưu trữ chính xác.
Giải pháp: Sử dụng BigInt
BigInt
là kiểu dữ liệu mới trong JavaScript giúp xử lý các số nguyên rất lớn một cách chính xác.
let bigNumber = BigInt(Number.MAX_SAFE_INTEGER); console.log(bigNumber + 2n); // Output: 9007199254740993n (Đúng)
BigInt
cho phép lưu trữ và thực hiện các phép toán trên số nguyên lớn mà không bị mất độ chính xác.- Lưu ý rằng
BigInt
không thể được sử dụng chung với kiểuNumber
trong các phép toán.
Lỗi khi so sánh số thực với sai số nhỏ (Floating-Point Precision Error)
Nguyên nhân
- JavaScript sử dụng chuẩn IEEE 754 cho số dấu chấm động, dẫn đến các lỗi chính xác khi thực hiện phép toán số thực.
- Một ví dụ điển hình là
0.1 + 0.2 !== 0.3
do sai số dấu chấm động.
Ví dụ lỗi
console.log(0.1 + 0.2); // Output: 0.30000000000000004 (Sai!) console.log(0.1 + 0.2 === 0.3); // Output: false (vì 0.30000000000000004 !== 0.3)