Lewati ke konten

null dan undefined

Setelah membaca halaman ini, kamu akan mampu:

  • Memahami apa itu null dan kapan digunakannya
  • Memahami apa itu undefined dan kapan muncul
  • Membedakan null dan undefined dengan jelas
  • Menghindari kesalahan umum terkait keduanya

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 artinya sebuah variabel sudah dideklarasikan, tapi belum diisi dengan nilai apapun.

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.

📄 TypeScript
// 1. Variabel dideklarasikan tapi belum diisi
let nomorTelepon: string
console.log(nomorTelepon) // undefined
// 2. Property object yang tidak ada
const siswa = { nama: "Putra" }
console.log(siswa.umur) // undefined — property 'umur' tidak ada
// 3. Parameter fungsi yang tidak diberikan argumen
function sapa(nama: string, sapaan?: string) {
console.log(sapaan) // undefined jika tidak dikirim
}
sapa("Putra") // memanggil tanpa argumen 'sapaan'

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.

📄 TypeScript
// Data siswa yang belum punya alamat email
let emailSiswa: string | null = null
// Hasil pencarian yang tidak menemukan apapun
let hasilCari: string | null = null
// Nanti bisa diisi jika sudah tersedia
emailSiswa = "putra@smk.sch.id"

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

Situasi: Data siswa baru
let namaSiswa: string = "Putra" // ✓ ada nilai
let nilaiUjian: number // undefined — belum ujian
let alamatEmail: string | null = null // null — belum punya email
undefined → "Saya tidak tahu ada apa di sini"
null → "Saya tahu di sini kosong"

Buat file src/bab1/null-dan-undefined.ts:

📄 TypeScript
// Contoh undefined
let nomorAbsen: number
console.log("Nomor absen sebelum diisi:", nomorAbsen) // undefined
nomorAbsen = 15
console.log("Nomor absen setelah diisi:", nomorAbsen) // 15
// Contoh null
let emailSiswa: string | null = null
console.log("Email sebelum diisi:", emailSiswa) // null
emailSiswa = "dewi@smk.sch.id"
console.log("Email setelah diisi:", emailSiswa) // dewi@smk.sch.id
// Perbandingan
console.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 JavaScript
console.log(typeof undefined) // "undefined"

Jalankan:

tsx src/bab1/null-dan-undefined.ts

Di TypeScript, secara default variabel tidak boleh bernilai null (tergantung konfigurasi). Untuk mengizinkan null, kita menggunakan union type dengan tanda |:

📄 TypeScript
let email: string | null = null // boleh string atau null
let nama: string = null // Error! (jika strictNullChecks aktif)

Tanda | dibaca “atau” — jadi string | null artinya “bisa string atau bisa null”.


📄 TypeScript
let email: string | null = null
// Cara 1: Perbandingan langsung
if (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"

❌ Menggunakan variabel undefined tanpa cek

Section titled “❌ Menggunakan variabel undefined tanpa cek”
📄 TypeScript
let nilai: number
console.log(nilai * 2) // Error saat runtime! nilai masih undefined

Cara memperbaiki:

📄 TypeScript
let nilai: number = 0 // beri nilai default
// atau
let nilai: number
nilai = 80
console.log(nilai * 2) // ✓ 160

❌ Tidak memberi tipe null pada variabel yang membutuhkannya

Section titled “❌ Tidak memberi tipe null pada variabel yang membutuhkannya”
📄 TypeScript
let email: string = null // Error jika strictNullChecks aktif

Cara memperbaiki:

📄 TypeScript
let email: string | null = null // ✓

Buat file src/bab1/latihan-null-undefined.ts:

  1. Buat variabel namaWali: string | null = null (orang tua belum mengisi data)
  2. Buat variabel nilaiMidterm: number (ujian belum dilaksanakan)
  3. Tampilkan kedua variabel dan perhatikan outputnya
  4. Isi namaWali dengan nama sebuah nama orang
  5. Isi nilaiMidterm dengan angka nilai
  6. Tampilkan lagi dan bandingkan outputnya

  • undefined — variabel ada tapi belum pernah diisi, muncul secara otomatis
  • null — variabel diisi dengan “tidak ada” secara sengaja oleh programmer
  • null === undefined menghasilkan false (tipe berbeda)
  • Gunakan string | null (union type) untuk variabel yang boleh bernilai null
  • Gunakan operator ?? (nullish coalescing) sebagai nilai default jika null/undefined