Saya pikir cara paling efisien untuk menguji "nilai adalah null
atau undefined
" adalah
if ( some_variable == null ){
// some_variable is either null or undefined
}
Jadi dua baris ini setara:
if ( typeof(some_variable) !== "undefined" && some_variable !== null ) {}
if ( some_variable != null ) {}
Catatan 1
Seperti disebutkan dalam pertanyaan, varian pendek mengharuskan yang some_variable
telah dinyatakan, jika tidak ReferenceError akan dibuang. Namun dalam banyak kasus penggunaan Anda dapat menganggap bahwa ini aman:
periksa argumen opsional:
function(foo){
if( foo == null ) {...}
periksa properti pada objek yang ada
if(my_obj.foo == null) {...}
Di sisi lain typeof
dapat menangani variabel global yang tidak dideklarasikan (hanya mengembalikan undefined
). Namun kasus-kasus ini harus dikurangi seminimal mungkin untuk alasan yang baik, seperti dijelaskan Alsciende.
Catatan 2
Varian ini - bahkan lebih pendek - tidak setara:
if ( !some_variable ) {
// some_variable is either null, undefined, 0, NaN, false, or an empty string
}
begitu
if ( some_variable ) {
// we don't get here if some_variable is null, undefined, 0, NaN, false, or ""
}
Catatan 3
Secara umum disarankan untuk menggunakan ===
bukan ==
. Solusi yang diusulkan adalah pengecualian untuk aturan ini. The JSHint sintaks checker bahkan menyediakan eqnull
pilihan untuk alasan ini.
Dari panduan gaya jQuery :
Pemeriksaan kesetaraan yang ketat (===) harus digunakan untuk ==. Satu-satunya pengecualian adalah ketika memeriksa tidak terdefinisi dan null dengan nol.
// Check for both undefined and null values, for some important reason.
undefOrNull == null;
if(some_variable) { ... }
tidak akan mengeksekusi jikasome_variable
inifalse
atau0
atau ...