Saya mengambil ini dari sini
Nilai tidak terdefinisi adalah nilai primitif yang digunakan ketika suatu variabel belum diberi nilai.
Nilai nol adalah nilai primitif yang mewakili referensi nol, kosong, atau tidak ada.
Ketika Anda mendeklarasikan variabel melalui var dan tidak memberikan nilai, itu akan memiliki nilai yang tidak terdefinisi. Dengan sendirinya, jika Anda mencoba untuk WScript.Echo () atau mengingatkan () nilai ini, Anda tidak akan melihat apa pun. Namun, jika Anda menambahkan string kosong ke sana maka tiba-tiba itu akan muncul:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
Anda dapat mendeklarasikan variabel, setel ke nol, dan perilaku itu identik kecuali bahwa Anda akan melihat "null" dicetak versus "tidak terdefinisi". Ini memang perbedaan kecil.
Anda bahkan dapat membandingkan variabel yang tidak ditentukan ke nol atau sebaliknya, dan kondisinya akan benar:
undefined == null
null == undefined
Namun, mereka dianggap dua jenis yang berbeda. Sementara undefined adalah tipe untuk dirinya sendiri, null dianggap sebagai nilai objek khusus. Anda bisa melihat ini dengan menggunakan typeof () yang mengembalikan string yang mewakili tipe umum variabel:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
Menjalankan skrip di atas akan menghasilkan output berikut:
undefined
object
Terlepas dari jenis mereka yang berbeda, mereka masih akan bertindak sama jika Anda mencoba mengakses anggota dari salah satu dari mereka, misalnya yang mengatakan mereka akan melemparkan pengecualian. Dengan WSH Anda akan melihat "varname 'yang ditakuti adalah nol atau bukan objek" dan itu jika Anda beruntung (tapi itu topik untuk artikel lain).
Anda dapat secara eksplisit mengatur variabel menjadi tidak terdefinisi, tetapi saya sangat menyarankan untuk tidak melakukannya. Saya sarankan hanya mengatur variabel ke nol dan meninggalkan nilai yang tidak ditentukan untuk hal-hal yang Anda lupa atur. Pada saat yang sama, saya sangat menyarankan Anda untuk selalu mengatur setiap variabel. JavaScript memiliki rantai cakupan yang berbeda dari bahasa gaya C, dengan mudah membingungkan programmer veteran, dan mengatur variabel ke null adalah cara terbaik untuk mencegah bug berdasarkannya.
Contoh lain di mana Anda akan melihat pop up tidak terdefinisi adalah ketika menggunakan operator hapus. Kita dari dunia C mungkin salah menafsirkan ini sebagai menghancurkan objek, tetapi tidak demikian. Apa yang dilakukan operasi ini adalah menghapus subskrip dari Array atau anggota dari Object. Untuk Array itu tidak mempengaruhi panjang, melainkan bahwa subskrip sekarang dianggap tidak terdefinisi.
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
Hasil dari skrip di atas adalah:
0.) a
1.) undefined
2.) c
Anda juga akan mendapatkan pengembalian yang tidak terdefinisi saat membaca subskrip atau anggota yang tidak pernah ada.
Perbedaan antara nol dan tidak terdefinisi adalah: JavaScript tidak akan pernah mengatur apa pun menjadi nol, itulah yang biasanya kami lakukan. Meskipun kita dapat mengatur variabel ke undefined, kita lebih suka null karena itu bukan sesuatu yang pernah dilakukan untuk kita. Ketika Anda melakukan debug, ini berarti bahwa apa pun yang disetel ke nol adalah pekerjaan Anda sendiri dan bukan JavaScript. Di luar itu, dua nilai khusus ini hampir setara.
null
nilai dalam JavaScript?