Di JavaScript, ada dua nilai yang pada dasarnya mengatakan 'Saya tidak ada' - undefined
dan null
.
Properti yang belum ditetapkan apa pun oleh programmer undefined
, tetapi agar properti menjadi null
, null
harus ditetapkan secara eksplisit padanya.
Saya pernah berpikir bahwa ada kebutuhan null
karena undefined
adalah nilai primitif dan null
sebuah objek. Ini tidak, bahkan jika typeof null
akan menghasilkan 'object'
: Sebenarnya, keduanya nilai-nilai primitif - yang berarti tidak undefined
atau null
dapat kembali dari fungsi konstruktor, karena keduanya akan dikonversi ke obyek kosong (kita harus melempar kesalahan kegagalan kabarkan di konstruktor).
Keduanya juga mengevaluasi false
dalam konteks boolean. Satu-satunya perbedaan nyata yang dapat saya pikirkan adalah bahwa yang satu mengevaluasi NaN
, yang lain ke 0
dalam konteks numerik.
Jadi mengapa ada keduanya undefined
dan null
jika ini hanya membingungkan pemrogram yang salah memeriksa null
saat mencoba mencari tahu apakah properti telah disetel atau belum?
Yang ingin saya ketahui adalah jika ada yang memiliki contoh yang masuk akal di mana perlu menggunakan null
yang tidak bisa diekspresikan menggunakan undefined
.
Jadi konsensus umum tampaknya undefined
berarti 'tidak ada properti seperti itu' sedangkan null
berarti 'properti itu ada, tetapi tidak memiliki nilai'.
Saya dapat menerimanya jika implementasi JavaScript benar-benar akan memberlakukan perilaku ini - tetapi undefined
merupakan nilai primitif yang benar-benar valid, sehingga dapat dengan mudah ditetapkan ke properti yang ada untuk memutuskan kontrak ini. Oleh karena itu, jika Anda ingin memastikan apakah suatu properti ada, Anda harus menggunakan in
operator atau hasOwnProperty()
tetap. Jadi sekali lagi: apa kegunaan praktis dari nilai terpisah untuk undefined
dan null
?
Saya benar-benar menggunakan undefined
saat saya ingin menghapus nilai properti yang tidak lagi digunakan tetapi saya tidak mau delete
. Haruskah saya gunakan null
sebagai gantinya?
In JavaScript, there are two values which basically say 'I don't exist' - undefined and null.
Tidak, hanya undefined
katakan itu.
undefined
.