Cara Cek Tipe Data di JavaScript dengan typeof

typeof membantu memeriksa tipe data dengan cepat, tapi hasilnya tidak selalu sesuai dugaan saat berhadapan dengan array, null, atau angka NaN.

Tangan pengembang mengetik kode di laptop dengan catatan di meja kerja

Kamu mengambil data dari sebuah form, lalu ingin memastikan isinya benar-benar angka sebelum dihitung. Atau kamu menerima respons dari sebuah API dan tidak yakin apakah sebuah properti berisi string atau objek. Di situasi seperti itu, operator typeof jadi alat pertama yang biasanya dipakai orang. Hasilnya berupa string yang menyebut jenis nilai, misalnya "number" atau "string".

Sayangnya, typeof punya beberapa jawaban yang bikin bingung pemula, terutama untuk array dan null. Bagian berikut menjelaskan cara memakainya dengan tepat dan kapan perlu beralih ke pemeriksaan lain.

Bentuk dasar pemakaian typeof

typeof adalah operator, bukan fungsi, jadi kamu bisa menulisnya tanpa tanda kurung. Dua bentuk ini menghasilkan nilai yang sama:

typeof 42;          // "number"
typeof("halo");     // "string"

Karena hasilnya string, kamu bisa membandingkannya langsung dengan tanda sama dengan. Pola ini sering muncul saat memvalidasi input sebelum diproses lebih lanjut.

function hitungDiskon(harga) {
  if (typeof harga !== "number") {
    return "Harga harus berupa angka";
  }
  return harga * 0.9;
}

Perhatikan bahwa pemeriksaan dilakukan di awal fungsi, sebelum perhitungan. Dengan begitu, pesan kesalahan muncul dari sumbernya, bukan dari hasil operasi yang sudah kacau.

Daftar hasil typeof untuk tiap tipe

JavaScript punya beberapa tipe primitif dan satu tipe objek. Berikut hasil yang dikembalikan typeof untuk masing-masing nilai:

  • "string" untuk teks, termasuk string kosong.
  • "number" untuk angka, termasuk NaN dan Infinity.
  • "boolean" untuk true dan false.
  • "undefined" untuk variabel yang belum diberi nilai.
  • "object" untuk objek biasa, array, dan null.
  • "function" untuk fungsi, termasuk arrow function dan class.
  • "bigint" untuk bilangan bulat berukuran sangat besar.
  • "symbol" untuk nilai symbol.

Dua baris terakhir jarang muncul di kode sehari-hari, tapi berguna kalau kamu membaca kode pustaka pihak ketiga. Sisanya hampir selalu ada dalam proyek biasa.

Kenapa array dan null terdeteksi sebagai object

Ini pertanyaan yang paling sering muncul saat orang pertama kali memakai typeof. Array adalah objek dalam JavaScript, dan null diperlakukan sebagai referensi kosong yang juga bertipe objek. Perilaku ini sudah ada sejak awal bahasa dan tidak akan berubah karena banyak kode lama bergantung padanya.

typeof [];     // "object"
typeof null;   // "object"

Untuk membedakan array dari objek biasa, pakai Array.isArray(). Fungsi ini mengembalikan true hanya jika nilai benar-benar array.

Array.isArray([]);           // true
Array.isArray({ a: 1 });     // false
Array.isArray("bukan array"); // false

Untuk null, cukup bandingkan langsung dengan === null. Jangan pakai typeof di kasus itu karena hasilnya menyesatkan.

Memeriksa NaN dan angka yang tidak valid

Salah satu jebakan lain: typeof NaN menghasilkan "number". Nilai NaN muncul ketika operasi matematika gagal, misalnya Number("abc"). Kalau kamu hanya memeriksa dengan typeof, nilai ini lolos validasi padahal bukan angka yang bisa dipakai.

typeof NaN;         // "number"
Number.isNaN(NaN);  // true

Gunakan Number.isNaN() untuk mendeteksi nilai semacam ini, bukan isNaN() global yang suka mengubah tipe argumennya terlebih dahulu. Perbedaan kecil ini sering menjadi sumber bug yang sulit dilacak, terutama saat data berasal dari input pengguna.

Kapan perlu beralih ke pemeriksaan lain

typeof cocok untuk membedakan kategori besar: apakah sebuah nilai primitif, fungsi, atau objek. Untuk membedakan jenis objek yang lebih spesifik, ada alat lain yang lebih tepat.

  • Array.isArray() untuk memastikan nilai adalah array.
  • instanceof untuk memeriksa apakah objek dibuat dari class tertentu, misalnya error instanceof Error.
  • Object.prototype.toString.call() untuk mendapatkan label tipe yang lebih rinci, misalnya [object Date].
  • Pemeriksaan properti seperti "length" in nilai kalau kamu hanya butuh tahu apakah objek punya struktur tertentu.

Pilihan alat ini tergantung seberapa ketat validasi yang kamu butuhkan. Untuk skrip kecil, typeof sudah cukup. Untuk data yang masuk dari luar, gabungan beberapa pemeriksaan lebih aman. Pola validasi yang rapi juga membantu saat kamu menulis fungsi yang dipakai berulang, seperti dibahas di artikel kesalahan umum saat menulis fungsi JavaScript.

Contoh pemakaian dalam validasi form

Bayangkan kamu punya form sederhana dengan field umur. Nilai dari input selalu berupa string, jadi kamu perlu mengubahnya dulu sebelum memeriksa tipe.

const input = document.querySelector("#umur").value;
const angka = Number(input);

if (Number.isNaN(angka)) {
  console.log("Umur harus berupa angka");
} else if (typeof angka !== "number") {
  console.log("Tipe data tidak dikenali");
} else {
  console.log("Umur:", angka);
}

Urutan pemeriksaan penting di sini. Number.isNaN() dijalankan lebih dulu karena hasil konversi bisa jadi NaN yang tetap bertipe "number". Kalau kamu membalik urutannya, kondisi kedua tidak akan pernah menangkap kasus tersebut.

Kalau kamu sering memproses data dari luar, membiasakan diri memeriksa tipe sebelum mengolah nilai akan mengurangi kejutan. Ini sejalan dengan kebiasaan debugging yang dibahas di tips praktis belajar JavaScript untuk pemula, di mana memastikan bentuk data adalah langkah pertama sebelum menyalahkan logika.

Ringkasan

typeof adalah cara cepat untuk mengetahui kategori sebuah nilai di JavaScript. Hasilnya akurat untuk string, number, boolean, undefined, dan function. Untuk array dan null, gunakan Array.isArray() dan perbandingan langsung. Untuk angka tidak valid, Number.isNaN() lebih dapat diandalkan daripada sekadar memeriksa tipe.

Pertanyaan yang Sering Diajukan

Apakah typeof bisa dipakai pada variabel yang belum dideklarasikan?

Bisa, dan hasilnya "undefined" tanpa memicu error. Ini satu-satunya operator yang aman dipakai pada nama variabel yang mungkin belum ada. Meski begitu, tetap lebih rapi mendeklarasikan variabel dengan jelas agar kode mudah dibaca.

Kenapa typeof null menghasilkan object?

Itu perilaku bawaan JavaScript yang sudah ada sejak versi awal. Nilai null direpresentasikan sebagai referensi kosong yang secara internal dianggap bertipe objek. Untuk memeriksa null dengan benar, bandingkan langsung memakai === null.

Apa bedanya typeof dan instanceof?

typeof mengembalikan string kategori tipe dan cocok untuk nilai primitif. instanceof memeriksa apakah sebuah objek dibuat dari constructor tertentu dan hanya berlaku untuk objek, bukan primitif. Pilih sesuai kebutuhan pemeriksaanmu.