Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีตรวจสอบค่าตัวเลขใน JavaScript (isNaN)

ใช้ isNaN() ตรวจสอบว่าค่า ไม่ใช่ ตัวเลข (Not-a-Number) คืน true ถ้าไม่ใช่ตัวเลข, false ถ้าเป็นตัวเลข

ตัวอย่างจากบทความ

<!DOCTYPE html>
<html>
  <body>
    <button onclick="display()">Check</button>
    <p id="test"></p>
    <script>
      function display() {
        var a = "";
        a = a + isNaN(6234) + ": 6234<br>";      // false: 6234
        a = a + isNaN(-52.1) + ": -52.1<br>";    // false: -52.1
        a = a + "ค่าด้านบนคืน false หมายถึงเป็นตัวเลข";
        document.getElementById("test").innerHTML = a;
      }
    </script>
  </body>
</html>

พฤติกรรมของ isNaN() (Global isNaN)

⚠️ มีพฤติกรรมแปลก: จะแปลง argument เป็น Number ก่อนตรวจสอบ

InputisNaN()หมายเหตุ
123falseเป็นตัวเลข
"123"falseแปลงเป็น 123 ได้
"hello"trueแปลงเป็น NaN
undefinedtrueNumber(undefined) = NaN
{}trueNumber({}) = NaN
[]falseNumber([]) = 0 ⚠️
[123]falseNumber([123]) = 123 ⚠️
nullfalseNumber(null) = 0 ⚠️
truefalseNumber(true) = 1 ⚠️
falsefalseNumber(false) = 0 ⚠️

Number.isNaN() (ES6 - แนะนำ)

ไม่แปลงค่า ตรวจสอบเฉพาะ NaN จริงๆ

InputNumber.isNaN()
NaNtrue
"hello"false
undefinedfalse
{}false
[]false
nullfalse
123false
// Global isNaN (legacy)
isNaN("hello");     // true
isNaN(undefined);   // true
isNaN({});          // true
isNaN([]);          // false ⚠️

// Number.isNaN (ES6 - recommended)
Number.isNaN("hello");     // false
Number.isNaN(undefined);   // false
Number.isNaN({});          // false
Number.isNaN([]);          // false
Number.isNaN(NaN);         // true ✓

ฟังก์ชันตรวจสอบตัวเลขที่สมบูรณ์

function isNumber(value) {
  return typeof value === 'number' && !isNaN(value) && isFinite(value);
}

function isInteger(value) {
  return Number.isInteger(value);
}

// ตัวอย่าง
isNumber(123);        // true
isNumber("123");      // false (เป็น string)
isNumber(NaN);        // false
isNumber(Infinity);   // false
isNumber(null);       // false

isInteger(10);        // true
isInteger(10.5);      // false
isInteger("10");      // false

สรุป

  • ใช้ Number.isNaN() แทน isNaN() (ES6+)
  • ใช้ typeof value === 'number' && Number.isFinite(value) สำหรับตรวจสอบตัวเลขที่ถูกต้อง
  • ใช้ Number.isInteger() สำหรับตรวจสอบจำนวนเต็ม