Có nhiều cách kiểm tra, tùy mục đích:
1. Number.isInteger() — Chỉ số nguyên (ES6)
Number.isInteger(30); // true
Number.isInteger(30.5); // false
Number.isInteger("30"); // false
Number.isInteger(NaN); // false
2. Number.isFinite() — Số hữu hạn (không NaN, không Infinity)
Number.isFinite(30); // true Number.isFinite(30.5); // true Number.isFinite(Infinity); // false Number.isFinite(NaN); // false
3. typeof + Number.isFinite() — Kiểm tra kiểu number hợp lệ
function laSoHopLe(val) {
return typeof val === 'number' && Number.isFinite(val);
}
laSoHopLe(10); // true
laSoHopLe(10.5); // true
laSoHopLe("10"); // false
laSoHopLe(NaN); // false
laSoHopLe(Infinity); // false
4. isNaN() vs Number.isNaN()
isNaN("hello"); // true (ép kiểu -> NaN)
Number.isNaN("hello"); // false (không ép kiểu)
Number.isNaN(NaN); // true
Ví dụ: Number.isInteger()
<!DOCTYPE html>
<html>
<body>
<script>
document.write(Number.isInteger(30) + "<br>"); // true
document.write(Number.isInteger(true) + "<br>"); // false
document.write(Number.isInteger(false) + "<br>"); // false
document.write(Number.isInteger(-30) + "<br>"); // true
</script>
</body>
</html>
Tóm tắt khi nào dùng cái nào:
| Mục đích | Hàm khuyến nghị |
|---|---|
| Chỉ số nguyên (int) | Number.isInteger() |
| Số bất kỳ (int/float), không NaN/Infinity | typeof x === 'number' && Number.isFinite(x) |
| Kiểm tra NaN | Number.isNaN() |
| Kiểm tra "giống số" (parse được) | !isNaN(parseFloat(x)) && isFinite(x) |