Saya agak bingung tentang Javascript tidak terdefinisi & nol.
Jangan bingung null
. Biasanya masuk akal dan berperilaku mirip dengan konsep bahasa scripting lain 'out-of-band' null ',' nil 'atau' None '.
undefined
, di sisi lain, adalah kekhasan JavaScript yang aneh. Ini adalah objek tunggal yang mewakili nilai out-of-band, pada dasarnya kedua serupa-tetapi-berbeda null
. Itu muncul:
Saat Anda memanggil fungsi dengan argumen lebih sedikit dari daftar argumen di daftar function
pernyataan, argumen yang tidak dilimpahkan diatur ke undefined
. Anda dapat menguji untuk itu dengan misalnya .:
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
Dengan metode ini Anda tidak dapat membedakan antara dosomething(1)
dan dosomething(1, undefined)
; arg2
akan bernilai sama di keduanya. Jika Anda perlu memberi tahu perbedaannya, Anda dapat melihatnya arguments.length
, tetapi melakukan argumen opsional seperti itu umumnya tidak terlalu mudah dibaca.
Ketika suatu fungsi tidak return value;
, itu kembali undefined
. Biasanya tidak perlu menggunakan hasil pengembalian seperti itu.
Saat Anda mendeklarasikan variabel dengan memiliki var a
pernyataan di blok, tetapi belum menetapkan nilainya, itu adalah undefined
. Sekali lagi, Anda seharusnya tidak perlu bergantung pada itu.
typeof
Operator seram kembali 'undefined'
ketika operan adalah variabel sederhana yang tidak ada, alih-alih melempar kesalahan seperti biasa terjadi jika Anda mencoba merujuknya. (Anda juga bisa memberikan variabel sederhana yang dibungkus dengan tanda kurung, tetapi bukan ekspresi penuh yang melibatkan variabel yang tidak ada.) Tidak banyak gunanya juga.
Ini yang kontroversial. Ketika Anda mengakses properti dari objek yang tidak ada, Anda tidak langsung mendapatkan kesalahan seperti dalam setiap bahasa lainnya. Sebaliknya Anda mendapatkan undefined
objek. (Dan kemudian ketika Anda mencoba untuk menggunakan undefined
objek itu nanti dalam skrip itu akan salah dengan cara yang aneh yang jauh lebih sulit untuk dilacak daripada jika JavaScript baru saja melemparkan kesalahan langsung.)
Ini sering digunakan untuk memeriksa keberadaan properti:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
Namun, karena Anda dapat menetapkan undefined
seperti nilai lainnya:
o.prop= undefined;
itu tidak benar-benar mendeteksi apakah properti itu ada di sana dengan andal. Lebih baik menggunakan in
operator, yang bukan dalam versi Netscape asli JavaScript, tetapi tersedia di mana-mana sekarang:
if ('prop' in o)
...
Singkatnya, undefined
adalah kekacauan khusus JavaScript, yang membingungkan semua orang. Terlepas dari argumen fungsi opsional, di mana JS tidak memiliki mekanisme lain yang lebih elegan, undefined
harus dihindari. Seharusnya tidak pernah menjadi bagian dari bahasa; null
akan bekerja dengan baik untuk (2) dan (3), dan (4) adalah kesalahan yang hanya ada karena pada awalnya JavaScript tidak memiliki pengecualian.
apa yang if (!testvar)
sebenarnya dilakukan Apakah tes untuk undefined dan null atau hanya undefined?
Seperti pemeriksaan tes 'truthiness' melawan false
, undefined
,null
, 0
, NaN
dan string kosong. Tapi dalam kasus ini, ya, itu benar undefined
- benar diperhatikan. IMO, itu harus lebih eksplisit tentang itu dan katakan if (testvar!==undefined)
.
setelah suatu variabel didefinisikan dapatkah saya menghapusnya kembali ke tidak terdefinisi (karena itu menghapus variabel).
Anda tentu dapat menetapkannya undefined
, tetapi itu tidak akan menghapus variabel. Hanya delete object.property
operator yang benar-benar menghapus barang.
delete
benar-benar dimaksudkan untuk properti daripada variabel seperti itu. Peramban akan membiarkan Anda lolos dengan lurus delete variable
, tetapi itu bukan ide yang baik dan tidak akan berfungsi dalam mode ketat ECMAScript Fifth Edition. Jika Anda ingin membebaskan referensi ke sesuatu sehingga dapat dikumpulkan dengan sampah, itu akan lebih biasa dikatakan variable= null
.
dapatkah saya melewatkan parameter yang tidak ditentukan?
Iya.