Soal 1Apa yang dikembalikan typeof null?
Ringkasan Tipe Data — typeof dan Tabel Referensi Cepat
Ringkasan tipe data JavaScript: 7 primitive dan Object, hasil typeof, serta cara mengeceknya.
Value JavaScript mencakup string, number, boolean, array, object, null, undefined, Map, dan Set. Dalam kerja nyata, kamu mengecek apakah value yang datang dari form atau server adalah type yang kamu harapkan sebelum memprosesnya.
Artikel ini menguraikan semuanya dari 1 sudut pandang — type — merangkum apa yang dikembalikan typeof dan cara yang benar mengecek tiap type.
Type Terbagi Jadi 7 Primitive dan Object
Mengetahui type sebuah value menentukan apa yang bisa kamu lakukan dengannya. String memberimu length dan slice; number membiarkanmu menghitung; array memberimu push.
Salah menebak type saat memproses value yang datang, sebaliknya, dan undefined atau NaN bisa lolos sampai akhir tanpa kamu sadari.
Value JavaScript terbagi jadi primitive (7 jenis: number, string, boolean, null, undefined, symbol, dan bigint — value yang bukan object maupun array) dan Object (value yang memegang property; array, Map, dan Set semuanya masuk kategori ini juga).
Kursus ini sudah membahas 5 primitive pertama dan Object.
Dari 2 sisanya, symbol (value untuk membuat key unik yang tidak pernah duplikat) dipakai saat kamu perlu jenis key khusus, dan bigint (value khusus untuk menangani integer yang sangat besar) dipakai untuk integer yang terlalu besar untuk direpresentasikan Number secara akurat. Tidak satu pun muncul dalam cakupan kursus ini, jadi cukup tahu namanya dan di mana posisinya.
Operator yang mengecek type adalah typeof. Tulis di depan sebuah value, dan itu mengembalikan nama type-nya sebagai string.
Apa yang dikembalikan tetap pada 8 jenis: "string" "number" "boolean" "undefined" "symbol" "bigint" "object" "function". "function" cuma kembali saat kamu berikan sebuah function — function dibahas di kategori berikutnya.
| Contoh Value | Kategori | Hasil typeof |
|---|---|---|
| String seperti ORD-6033 | Primitive | string |
| Number seperti 9800 | Primitive | number |
| true dan false | Primitive | boolean |
| Variable tanpa value yang di-assign | Primitive | undefined |
| null | Primitive | object |
| Object dan array | Object | object |
console.log(typeof "ORD-6033"); // string
console.log(typeof 9800); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof { orderId: "ORD-6033" }); // object
console.log(typeof [1, 2]); // object
// null juga primitive, tapi typeof mengembalikan object
console.log(typeof null); // object
3 Hal yang Dikembalikan typeof Sebagai object — null, Array, dan Object
Apakah sebuah value yang datang dari server adalah "object shipping-address," "null yang belum dipilih," atau "array produk" mengubah apa yang kamu lakukan selanjutnya. Tapi typeof mengembalikan "object" yang sama untuk ketiganya, jadi itu tidak bisa dipakai untuk pengecekan ini secara langsung.
typeof null mengembalikan "object" sudah jadi perilaku JavaScript sejak awal keberadaannya. Itu error spesifikasi yang diketahui, tapi memperbaikinya akan merusak kode yang sudah ada, jadi tetap dibiarkan seperti itu.
Cek null langsung dengan value === null.
Cek sebuah array dengan Array.isArray(value). Itu mengembalikan true hanya saat kamu berikan sebuah array, jadi itu membedakan array dari object dan null.
Singkirkan keduanya dulu, dan "object" apa pun yang tersisa adalah "object yang bukan array maupun null."
object dari typeof. Tiap value dapat pengecekan berbeda. Apa pun yang bukan 2 lainnya adalah object.const shipping = null;
const cart = ["Mouse"];
const order = { orderId: "ORD-6033" };
// typeof mengembalikan hasil yang sama untuk ketiganya
console.log(typeof shipping); // object
console.log(typeof cart); // object
// Cek null langsung dengan ===
console.log(shipping === null); // true
// Cek array dengan Array.isArray
console.log(Array.isArray(cart)); // true
console.log(Array.isArray(order)); // false
// Apakah ini object yang bukan array maupun null?
console.log(typeof order === "object" && order !== null && !Array.isArray(order)); // true
Singkirkan null Sebelum Membaca Isinya
Jadikan typeof value === "object" satu-satunya kondisimu sebelum membaca isi sebuah value, dan itu berhenti dengan TypeError begitu value adalah null. typeof membiarkan null lolos begitu saja, jadi cek value !== null dulu, atau pakai optional chaining, seperti value?.city.
Apakah Sebuah String Bisa Diperlakukan Sebagai Number — Number dan Number.isNaN
Sebuah quantity atau amount yang datang dari form terlihat seperti digit, tapi type-nya adalah string. Pakai itu dalam perhitungan tanpa mengecek dulu apakah bisa diperlakukan sebagai number, dan value seperti "12px" langsung mengalir ke perhitungannya dan menghasilkan NaN.
Yang dibahas di sini bukan type-nya sendiri, tapi apakah itu bisa dikonversi.
Mengonversi dengan Number(input) dan mengecek apakah hasilnya NaN dengan Number.isNaN(result) sudah dibahas di artikel type conversion. Yang layak dipisahkan dari pengecekan type di sini adalah ini pengecekan isi, bukan type.
Baik "9800" maupun "abc" punya typeof yang sama, "string" — apakah sesuatu berfungsi sebagai quantity tidak bisa ditebak dari type-nya.
Jebakannya adalah string kosong. Number("") mengembalikan 0, bukan NaN, jadi field form yang tidak diisi bisa lolos sebagai "input quantity yang valid, 0."
Untuk menolak string kosong, cek input !== "" sebelum mengonversi.
NaN. Cuma string kosong yang jadi 0, jadi tolak dulu sebelum mengonversi.console.log(Number("9800")); // 9800
console.log(Number("abc")); // NaN
console.log(Number("")); // 0 (bukan NaN)
// Cek apakah hasil konversinya NaN
console.log(Number.isNaN(Number("abc"))); // true
console.log(Number.isNaN(Number("9800"))); // false
// String kosong lolos begitu saja jadi 0
console.log(Number.isNaN(Number(""))); // false
Memilih Pengecekan yang Tepat — Tabel Referensi Cepat
Ada lebih dari 1 cara menulis pengecekan type. Beberapa type bisa dibedakan typeof sendiri, yang lain butuh pengecekan tambahan di atas apa yang dikembalikan typeof, dan apakah isi sebuah string berfungsi sebagai number adalah pengecekan yang sama sekali terpisah dari type. Pilih cara menulisnya berdasarkan apa yang mau kamu pastikan.
typeof sendiri memutuskan tiap type kecuali object. Ganti ke pengecekan berbeda saat object kembali, atau saat kamu perlu melihat isi sebuah string.| Apa yang Dicek | Cara Menulisnya | Catatan |
|---|---|---|
| Apakah ini string, number, atau boolean? | typeof value === "string", dst. | Langsung berfungsi |
| Apakah sebuah value hilang? | value === undefined | typeof juga berfungsi. Untuk sekadar default value, pakai ?? (artikel 9) |
| Apakah ini null? | value === null | typeof mengembalikan object untuk ini |
| Apakah ini array? | Array.isArray(value) | typeof mengembalikan object untuk ini |
| Apakah ini object biasa? | typeof-nya object, dikurangi null dan array | Rangkai 3 kondisi dengan && |
| Bisakah ini diperlakukan sebagai number? | Konversi dengan Number, lalu cek dengan Number.isNaN | String kosong jadi 0 |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Mana dari ini yang mengecek apakah sesuatu adalah array?
Soal 3Apa yang dikembalikan Number("")?