Bingung Sama NaN? Gunakan isNaN() Buat Cek Validasi Angka

Bingung Sama NaN? Gunakan isNaN() Buat Cek Validasi Angka
Photo by Mick Haupt / Unsplash

Pernah ngalamin error aneh di JavaScript karena angka yang nggak valid? Atau mungkin pernah nemu NaN (Not-a-Number) tapi bingung cara ngeceknya? Nah, di sinilah isNaN() jadi penyelamat!

NaN di JavaScript sering muncul akibat operasi matematika yang gagal atau konversi string yang tidak valid ke angka. Dengan isNaN(), kita bisa memeriksa apakah suatu nilai benar-benar bukan angka, sehingga bisa menghindari error dalam kode.

Yuk, kita bahas gimana cara pakai isNaN(), bedanya dengan Number.isNaN(), dan kapan sebaiknya digunakan!

Apa Itu NaN?

NaN adalah singkatan dari "Not-a-Number", yaitu nilai spesial di JavaScript yang menunjukkan bahwa suatu ekspresi seharusnya menghasilkan angka, tapi gagal.

Contoh NaN dalam JavaScript

console.log(0 / 0);        // NaN (karena 0 dibagi 0 tidak terdefinisi)
console.log(Math.sqrt(-1)); // NaN (akar kuadrat dari -1 tidak valid)
console.log(parseInt("hello")); // NaN (karena "hello" bukan angka)

Ketiga contoh di atas menghasilkan NaN, karena hasil operasi matematikanya tidak masuk akal.

Cara Mengecek NaN dengan isNaN()

JavaScript menyediakan fungsi isNaN() untuk memeriksa apakah suatu nilai adalah NaN atau bukan.

Sintaks Dasar

isNaN(nilai);
  • Mengembalikan true jika nilai adalah NaN.
  • Mengembalikan false jika nilai adalah angka valid.

Contoh Penggunaan isNaN()

1. Mengecek NaN dari Operasi Matematika

console.log(isNaN(0 / 0));        // true (karena hasilnya NaN)
console.log(isNaN(100 / "abc"));  // true (karena "abc" bukan angka)
console.log(isNaN(10 - "5"));     // false (karena "5" dikonversi jadi angka)
console.log(isNaN(100));          // false (karena ini angka valid)

isNaN() bisa membantu kita tahu apakah suatu nilai adalah NaN atau bukan.

2. Validasi Input Pengguna

Misalnya kita meminta pengguna memasukkan angka, tapi harus dicek dulu valid atau tidak.

function validasiInput(input) {
  if (isNaN(input)) {
    console.log("Input bukan angka yang valid!");
  } else {
    console.log("Input valid:", input);
  }
}

validasiInput(50);      // Input valid: 50
validasiInput("hello"); // Input bukan angka yang valid!
validasiInput(NaN);     // Input bukan angka yang valid!

Menghindari kesalahan input sebelum digunakan dalam perhitungan.

Masalah isNaN() dan Solusi Number.isNaN()

Meski isNaN() berguna, fungsi ini punya kelemahan karena mengonversi nilai ke angka sebelum memeriksa NaN, yang bisa menyebabkan hasil yang tidak terduga.

Contoh Masalah isNaN()

console.log(isNaN("123")); // false (padahal ini string, bukan angka!)
console.log(isNaN("abc")); // true  (karena tidak bisa dikonversi ke angka)
console.log(isNaN(true));  // false (karena `true` dianggap 1)
console.log(isNaN(" "));   // false (karena spasi dianggap angka 0)

Masalah utama: isNaN() mencoba mengubah string atau boolean ke angka sebelum mengecek NaN, yang bisa bikin hasilnya membingungkan.

Solusi: Pakai Number.isNaN() untuk Validasi Lebih Akurat

Kalau butuh validasi yang lebih ketat dan tanpa konversi tipe data, pakai Number.isNaN().

Perbedaan isNaN() vs Number.isNaN()

console.log(isNaN("123"));        // false (dikonversi ke angka)
console.log(Number.isNaN("123")); // false (tidak dikonversi, langsung dicek)
console.log(isNaN(NaN));          // true (betul, ini NaN)
console.log(Number.isNaN(NaN));   // true (betul, ini NaN)
console.log(isNaN("hello"));      // true (karena gagal dikonversi)
console.log(Number.isNaN("hello"));// false (karena "hello" bukan tipe number)

Number.isNaN() hanya mengembalikan true jika nilai benar-benar NaN, tanpa konversi aneh-aneh.

Studi Kasus: Validasi Data dengan isNaN()

1. Menjaga Data Input Tetap Valid

Misalnya kita punya form yang menerima input angka, tapi harus dipastikan valid.

function hitungLuasPersegi(sisi) {
  if (isNaN(sisi)) {
    return "Error: Input bukan angka!";
  }
  return sisi * sisi;
}

console.log(hitungLuasPersegi(5));    // 25
console.log(hitungLuasPersegi("abc"));// Error: Input bukan angka!

Mencegah perhitungan dengan nilai yang tidak valid.

2. Membersihkan Data dalam Array

Misalnya kita punya array campuran angka dan nilai tidak valid, dan kita ingin membuang semua NaN.

let data = [100, "abc", NaN, 50, "xyz", 200];

let dataBersih = data.filter(num => !isNaN(num));

console.log(dataBersih);

Output:

[100, 50, 200]

Hasilnya hanya angka valid, tanpa NaN atau string aneh.

Kesimpulan

Metode Keamanan Kecepatan Kapan Dipakai?
isNaN() ❗ Berisiko Konversi 🐌 Bisa Lambat Untuk validasi dasar tapi perlu hati-hati
Number.isNaN() ✅ Aman 🚀 Lebih Cepat Untuk validasi angka tanpa konversi

Kapan Sebaiknya Pakai isNaN()?

  • Kalau ingin validasi cepat untuk angka tapi bisa menerima tipe data lain.
  • Kalau tidak masalah dengan konversi string ke angka.

Kapan Harus Pakai Number.isNaN()?

  • Kalau butuh validasi angka tanpa konversi.
  • Kalau ingin memastikan nilai benar-benar NaN, bukan sekadar bukan angka.

Jadi, kalau kamu butuh cek apakah suatu nilai adalah NaN, pakai isNaN() atau lebih aman lagi Number.isNaN() biar kode tetap rapi dan bebas error!