null dan undefined
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu akan mampu:
- Memahami apa itu
nulldan kapan digunakannya - Memahami apa itu
undefineddan kapan muncul - Membedakan
nulldanundefineddengan jelas - Menghindari kesalahan umum terkait keduanya
Pendahuluan
Section titled “Pendahuluan”null dan undefined adalah dua tipe data yang sering membingungkan — bahkan bagi programmer yang sudah berpengalaman. Keduanya sama-sama mewakili “ketiadaan nilai”, tapi dengan makna yang berbeda.
Halaman ini akan membuat perbedaan itu menjadi sangat jelas.
undefined — Belum Ada Nilainya
Section titled “undefined — Belum Ada Nilainya”undefined artinya sebuah variabel sudah dideklarasikan, tapi belum diisi dengan nilai apapun.
Analogi: Kotak Kosong yang Belum Dibuka
Section titled “Analogi: Kotak Kosong yang Belum Dibuka”Bayangkan kamu memesan sebuah kotak dari toko online. Kotaknya sudah tiba — kamu tahu kotaknya ada — tapi kamu belum membukanya. Belum tahu isinya apa.
┌─────────────────┐│ alamatRumah ││─────────────────││ ??? │ ← belum pernah diisi, tidak tahu isinya└─────────────────┘Itulah undefined — kotak sudah ada, tapi isi belum ditentukan.
Kapan undefined Muncul?
Section titled “Kapan undefined Muncul?”// 1. Variabel dideklarasikan tapi belum diisilet nomorTelepon: stringconsole.log(nomorTelepon) // undefined
// 2. Property object yang tidak adaconst siswa = { nama: "Putra" }console.log(siswa.umur) // undefined — property 'umur' tidak ada
// 3. Parameter fungsi yang tidak diberikan argumenfunction sapa(nama: string, sapaan?: string) { console.log(sapaan) // undefined jika tidak dikirim}sapa("Putra") // memanggil tanpa argumen 'sapaan'null — Sengaja Dikosongkan
Section titled “null — Sengaja Dikosongkan”null artinya variabel sudah diisi, tapi isinya adalah “tidak ada” secara sengaja dan eksplisit. Ini adalah nilai yang dengan sadar kamu berikan.
Analogi: Tempat Parkir yang Sengaja Dikosongkan
Section titled “Analogi: Tempat Parkir yang Sengaja Dikosongkan”Bayangkan sebuah tempat parkir bertanda “RESERVED” tapi tidak ada mobilnya. Bukan karena belum ada yang memarkir — tapi memang sengaja dikosongkan untuk tujuan tertentu.
┌─────────────────┐│ alamatRumah ││─────────────────││ null │ ← sengaja dikosongkan, sudah tahu tidak ada└─────────────────┘Itulah null — kita tahu tempatnya ada, dan kita sengaja membuatnya kosong.
Kapan null Digunakan?
Section titled “Kapan null Digunakan?”// Data siswa yang belum punya alamat emaillet emailSiswa: string | null = null
// Hasil pencarian yang tidak menemukan apapunlet hasilCari: string | null = null
// Nanti bisa diisi jika sudah tersediaemailSiswa = "putra@smk.sch.id"Perbedaan null dan undefined
Section titled “Perbedaan null dan undefined”undefined |
null |
|
|---|---|---|
| Siapa yang buat? | TypeScript/JS otomatis | Programmer secara sengaja |
| Artinya | Belum pernah diisi | Sengaja dikosongkan |
| Analogi | Kotak yang belum dibuka | Tempat parkir reserved tapi kosong |
| Biasanya dari mana? | Variabel belum diinisialisasi | Nilai yang sengaja di-set |
Ilustrasi: Perbandingan Langsung
Section titled “Ilustrasi: Perbandingan Langsung”Situasi: Data siswa baru
let namaSiswa: string = "Putra" // ✓ ada nilailet nilaiUjian: number // undefined — belum ujianlet alamatEmail: string | null = null // null — belum punya emailundefined → "Saya tidak tahu ada apa di sini"null → "Saya tahu di sini kosong"Mari Mencoba
Section titled “Mari Mencoba”Buat file src/bab1/null-dan-undefined.ts:
// Contoh undefinedlet nomorAbsen: numberconsole.log("Nomor absen sebelum diisi:", nomorAbsen) // undefined
nomorAbsen = 15console.log("Nomor absen setelah diisi:", nomorAbsen) // 15
// Contoh nulllet emailSiswa: string | null = nullconsole.log("Email sebelum diisi:", emailSiswa) // null
emailSiswa = "dewi@smk.sch.id"console.log("Email setelah diisi:", emailSiswa) // dewi@smk.sch.id
// Perbandinganconsole.log("---")console.log(null == undefined) // true (hanya nilai, bukan tipe)console.log(null === undefined) // false (tipe berbeda!)console.log(typeof null) // "object" — ini keanehan warisan JavaScriptconsole.log(typeof undefined) // "undefined"Jalankan:
tsx src/bab1/null-dan-undefined.tsUnion Type: string | null
Section titled “Union Type: string | null”Di TypeScript, secara default variabel tidak boleh bernilai null (tergantung konfigurasi). Untuk mengizinkan null, kita menggunakan union type dengan tanda |:
let email: string | null = null // boleh string atau nulllet nama: string = null // Error! (jika strictNullChecks aktif)Tanda | dibaca “atau” — jadi string | null artinya “bisa string atau bisa null”.
Cara Mengecek null dan undefined
Section titled “Cara Mengecek null dan undefined”let email: string | null = null
// Cara 1: Perbandingan langsungif (email === null) { console.log("Email belum diisi")} else { console.log("Email:", email)}
// Cara 2: Falsy check (null dan undefined keduanya "falsy")if (!email) { console.log("Email kosong atau null")}
// Cara 3: Nullish coalescing operator (??)let emailTampil: string = email ?? "Belum ada email"console.log(emailTampil) // "Belum ada email"Kesalahan Umum
Section titled “Kesalahan Umum”❌ Menggunakan variabel undefined tanpa cek
Section titled “❌ Menggunakan variabel undefined tanpa cek”let nilai: numberconsole.log(nilai * 2) // Error saat runtime! nilai masih undefinedCara memperbaiki:
let nilai: number = 0 // beri nilai default// ataulet nilai: numbernilai = 80console.log(nilai * 2) // ✓ 160❌ Tidak memberi tipe null pada variabel yang membutuhkannya
Section titled “❌ Tidak memberi tipe null pada variabel yang membutuhkannya”let email: string = null // Error jika strictNullChecks aktifCara memperbaiki:
let email: string | null = null // ✓Latihan
Section titled “Latihan”Buat file src/bab1/latihan-null-undefined.ts:
- Buat variabel
namaWali: string | null = null(orang tua belum mengisi data) - Buat variabel
nilaiMidterm: number(ujian belum dilaksanakan) - Tampilkan kedua variabel dan perhatikan outputnya
- Isi
namaWalidengan nama sebuah nama orang - Isi
nilaiMidtermdengan angka nilai - Tampilkan lagi dan bandingkan outputnya
Ringkasan
Section titled “Ringkasan”undefined— variabel ada tapi belum pernah diisi, muncul secara otomatisnull— variabel diisi dengan “tidak ada” secara sengaja oleh programmernull === undefinedmenghasilkanfalse(tipe berbeda)- Gunakan
string | null(union type) untuk variabel yang boleh bernilai null - Gunakan operator
??(nullish coalescing) sebagai nilai default jika null/undefined