JavaScript
Number Methods
Number.isInteger
เรียนรู้ `Number.isInteger()` สำหรับตรวจสอบว่าค่าเป็นจำนวนเต็ม (integer) หรือไม่ — ไม่ทำ type coercion, ปลอดภัยและตรงไปตรงมา
Number.isInteger คืออะไร
`Number.isInteger(value)` คือ static method ของ `Number` ที่ตรวจสอบว่า `value` เป็นจำนวนเต็ม (integer) หรือไม่ — จำนวนเต็มคือตัวเลขที่ไม่มีจุดทศนิยม เช่น `42`, `0`, `-7` เรียกใช้แบบ static เสมอ: `Number.isInteger(value)` — เรียกบน `Number` constructor โดยตรง ไม่ต้องสร้าง instance ก่อน (รูปแบบเดียวกับ `Number.isNaN()` และ `Number.isFinite()` ที่เพิ่งเรียน) คืนค่าเป็น `boolean`: `true` เมื่อ `value` เป็น integer, `false` ในกรณีอื่นทั้งหมด — รวมถึงทศนิยม (`3.14`), `NaN`, `Infinity`, และค่าที่ไม่ใช่ `number` (เพราะไม่ทำ type coercion)
// ✅ true — จำนวนเต็ม
console.log(Number.isInteger(42)); // true
console.log(Number.isInteger(0)); // true
console.log(Number.isInteger(-7)); // true
// ❌ false — ไม่ใช่จำนวนเต็ม
console.log(Number.isInteger(3.14)); // false — มีทศนิยม
console.log(Number.isInteger(NaN)); // false — NaN ไม่ใช่ integer
console.log(Number.isInteger(Infinity)); // false — Infinity ไม่ใช่ integer
// ❌ false — ไม่ทำ type coercion
console.log(Number.isInteger("42")); // false — string ไม่ใช่ number- `Number.isInteger()` ตรวจสอบว่าค่าเป็น integer (จำนวนเต็ม) หรือไม่
- เรียกบน `Number` constructor โดยตรง — เป็น static method ไม่ต้องมี instance
- คืน `true` เฉพาะเมื่อเป็น integer จริง ๆ — ทศนิยม, `NaN`, `Infinity` ล้วนได้ `false`
- ไม่ทำ type coercion โดยเด็ดขาด — `Number.isInteger("42")` → `false`
- รูปแบบและการเรียกใช้เหมือน `Number.isNaN()` และ `Number.isFinite()`
กฎการตรวจสอบ — ใครได้ true ใครได้ false
กฎของ `Number.isInteger()` เรียบง่าย: จะคืน `true` เฉพาะเมื่อ `value` เป็น `number` ที่ไม่มีจุดทศนิยม ทุกอย่างอื่นคืน `false` ข้อควรรู้: - `Number.isInteger(3.0)` → `true` เพราะ `3.0` กับ `3` เป็นค่าเดียวกันใน JavaScript — `3.0 === 3` - `Number.isInteger(3.14)` → `false` — มีทศนิยม - `Number.isInteger("42")` → `false` — ไม่ทำ coercion, string ไม่ใช่ number - `Number.isInteger(NaN)` → `false`, `Number.isInteger(Infinity)` → `false` - `Number.isInteger(1n)` → throw `TypeError` — BigInt ใช้กับ `Number.isInteger()` ไม่ได้
| input | Number.isInteger(input) | เหตุผล |
|---|---|---|
| 42 | true | จำนวนเต็ม |
| 0 | true | 0 เป็น integer |
| -7 | true | จำนวนเต็มลบก็เป็น integer |
| 3.0 | true | 3.0 === 3 ใน JS — ไม่มีทศนิยมจริง |
| 3.14 | false | มีจุดทศนิยม |
| NaN | false | NaN ไม่ใช่ integer |
| Infinity | false | Infinity ไม่ใช่ integer |
| "42" | false | string — ไม่ทำ coercion |
| true | false | boolean — ไม่ทำ coercion |
| null | false | null — ไม่ทำ coercion |
| undefined | false | undefined — ไม่ทำ coercion |
// === true: จำนวนเต็ม (รวมค่าลบ และศูนย์) ===
console.log(Number.isInteger(42)); // true
console.log(Number.isInteger(0)); // true
console.log(Number.isInteger(-7)); // true
console.log(Number.isInteger(3.0)); // true — 3.0 === 3 ใน JS
// === false: มีทศนิยม ===
console.log(Number.isInteger(3.14)); // false
console.log(Number.isInteger(0.5)); // false
console.log(Number.isInteger(-2.7)); // false
// === false: NaN, Infinity, -Infinity ===
console.log(Number.isInteger(NaN)); // false
console.log(Number.isInteger(Infinity)); // false
console.log(Number.isInteger(-Infinity)); // false
// === false: ไม่ทำ type coercion ===
console.log(Number.isInteger("42")); // false — string
console.log(Number.isInteger(true)); // false — boolean
console.log(Number.isInteger(null)); // false — null- `Number.isInteger(3.0)` → `true` — เพราะ `3.0` เก็บเป็น `3` จริง ๆ ใน JavaScript
- ไม่ทำ coercion เด็ดขาด — string, boolean, null, undefined → `false` ทั้งหมด
- `NaN`, `Infinity`, `-Infinity` → `false` ทั้งหมด
- BigInt (`1n`) → throw `TypeError` — ต้องเช็ก `typeof` เป็น `bigint` ก่อน
- ถ้าอยากเช็กทั้ง finite และ integer → ใช้ `Number.isFinite(n) && Number.isInteger(n)`
ใช้ Number.isInteger เมื่อไหร่
`Number.isInteger()` ใช้เมื่อต้องการยืนยันว่าค่าเป็นจำนวนเต็มที่ใช้งานได้จริง — โดยเฉพาะ input จากผู้ใช้, API, หรือค่าที่ผ่านการคำนวณแล้ว สถานการณ์ที่พบบ่อย: - ตรวจสอบจำนวนสินค้า — ลูกค้าสั่ง 1.5 ชิ้นไม่ได้ - ตรวจสอบ array index — index ต้องเป็น integer - ตรวจสอบจำนวนรอบใน loop — ต้องเป็น integer - ใช้ร่วมกับ `Number.isFinite()` เพื่อความปลอดภัยสูงสุด — เช็กทั้ง finite และ integer ในทางปฏิบัติมักใช้ validate input ก่อนนำไปใช้ต่อ:
// ตรวจสอบจำนวนสินค้า — ต้องเป็น integer ที่มากกว่า 0
function isValidQuantity(qty) {
return Number.isInteger(qty) && qty > 0;
}
console.log(isValidQuantity(5)); // true ✅
console.log(isValidQuantity(1)); // true ✅
console.log(isValidQuantity(0)); // false — 0 ชิ้น
console.log(isValidQuantity(2.5)); // false — สั่ง 2.5 ชิ้นไม่ได้
console.log(isValidQuantity(-3)); // false — ติดลบไม่ได้
console.log(isValidQuantity("5")); // false — string ใช้ไม่ได้// ตรวจสอบว่า index ที่ให้มาใช้ได้กับ array นี้หรือไม่
function isValidIndex(arr, index) {
return (
Number.isInteger(index) &&
index >= 0 &&
index < arr.length
);
}
let items = ["a", "b", "c"];
console.log(isValidIndex(items, 1)); // true ✅
console.log(isValidIndex(items, 1.5)); // false — index ทศนิยมใช้ไม่ได้
console.log(isValidIndex(items, -1)); // false — index ติดลบ
console.log(isValidIndex(items, 3)); // false — เกิน length- ใช้ `Number.isInteger()` ตรวจสอบ quantity, count, index ที่ต้องเป็นจำนวนเต็ม
- ใช้คู่กับ `Number.isFinite()` เพื่อความปลอดภัยสูงสุด — `Number.isFinite(n) && Number.isInteger(n)`
- ไม่ต้องใช้ `Number.isInteger()` กับค่าที่รู้อยู่แล้วว่าเป็น integer — ใช้เฉพาะกับ input จากภายนอก
- ถ้ารับ string แล้วอยากเช็กว่าเป็น integer → แปลงด้วย `Number()` ก่อน แล้วใช้ `Number.isInteger()`