Saya ingin memeriksa apakah variabelnya didefinisikan atau tidak. Misalnya, berikut ini melempar kesalahan yang tidak didefinisikan
alert( x );
Bagaimana saya bisa menangkap kesalahan ini?
javascript
variables
undefined
Jineesh
sumber
sumber
Jawaban:
Dalam JavaScript,
null
adalah sebuah objek. Ada nilai lain untuk hal-hal yang tidak adaundefined
,. DOM kembalinull
untuk hampir semua kasus di mana gagal menemukan beberapa struktur dalam dokumen, tetapi dalam JavaScript sendiriundefined
adalah nilai yang digunakan.Kedua, tidak, tidak ada padanan langsung. Jika Anda benar-benar ingin memeriksa secara spesifik
null
, lakukan:Jika Anda ingin memeriksa apakah suatu variabel ada, itu hanya dapat dilakukan dengan
try
/catch
, karenatypeof
akan memperlakukan variabel yang tidak dideklarasikan dan variabel yang dideklarasikan dengan nilaiundefined
setara.Tetapi, untuk memeriksa apakah suatu variabel dinyatakan dan tidak
undefined
:Sebelumnya, perlu menggunakan
typeof
operator untuk memeriksa tidak terdefinisi dengan aman, karena itu mungkin untuk menetapkan kembaliundefined
seperti variabel. Cara lama terlihat seperti ini:Masalah
undefined
penugasan kembali diperbaiki di ECMAScript 5, yang dirilis pada 2009. Sekarang Anda dapat menggunakan===
dan!==
menguji dengan amanundefined
tanpa menggunakantypeof
seperti yangundefined
telah dibaca-hanya untuk beberapa waktu.Jika Anda ingin tahu apakah ada anggota yang independen tetapi tidak peduli apa nilainya:
Jika Anda ingin mengetahui apakah suatu variabel adalah truthy :
Sumber
sumber
typeof
operator (typeof null == 'object'
). Thenull
nilai adalah nilai primitif , yang merupakan satu-satunya nilai dari jenis Null .Satu-satunya cara untuk benar-benar menguji apakah suatu variabel
undefined
adalah dengan melakukan hal berikut. Ingat, undefined adalah objek dalam JavaScript.Beberapa solusi lain di utas ini akan membuat Anda percaya bahwa suatu variabel tidak terdefinisi meskipun telah didefinisikan (dengan nilai NULL atau 0, misalnya).
sumber
ReferenceError
.undefined
objek dalam javascript adalah informasi yang salah. Apakah pernyataan ini berhubungan dengan jawaban Anda? Ini adalah nilaiundefined
tipeundefined
, ditugaskan ke pengenal global bernamaundefined
.undefined
telah dibaca hanya sejak ES5. Anda dapat dengan aman menguji terdefinisi menggunakanif (x === undefined) {...}
atau menggunakan singkatan seperti ini:if (x === void 0)
.Secara teknis, solusi yang tepat adalah (saya percaya):
Anda terkadang bisa malas dan menggunakannya
tetapi itu memungkinkan kedua variabel x yang tidak didefinisikan, dan variabel x yang berisi nol, untuk mengembalikan true.
sumber
var x;
dan kemudiantypeof x;
Anda akan mendapatkan"undefined"
seperti jika Anda melakukannyatypeof lakjdflkdsjflsj;
Versi yang lebih mudah dan lebih singkat adalah:
ATAU
sumber
Saya sudah sering melakukan:
sumber
Anda juga dapat menggunakan operator kondisional ternary:
sumber
var a = false;
? Anda harus memeriksa bahwa jikaa===undefined
sebaliknyavar x;
melakukan di atas akan menimbulkan kesalahan!a
menguji true untukundefined
, itu juga menguji true untuk0
dannull
danfalse
. Ini sangat salah dan harus dihapus.Saya sering menggunakan cara paling sederhana:
EDIT:
Tanpa menginisialisasi variabel, pengecualian akan dilemparkan "Uncaught ReferenceError: variabel tidak didefinisikan ..."
sumber
Uncaught ReferenceError: variable is not defined
variable
didefinisikan olehvar variable;
. Dan cuplikan ini akan menimpavariable
dalam cakupan lokal. Itu dapat mematahkan logika yang mengharapkan untuk mengakses variabel penutupan atau global. Yaitu:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
"Solusi" potensial lain adalah menggunakan
window
objek. Ini menghindari masalah kesalahan referensi saat di browser.sumber
undefined
. Ini tidak akan melakukan itu.Kesalahan memberitahu Anda bahwa
x
itu bahkan tidak ada! Itu belum dideklarasikan , yang berbeda dari diberi nilai.Jika Anda menyatakan
x
, Anda tidak akan mendapatkan kesalahan. Anda akan mendapatkan lansiran yang mengatakanundefined
karenax
ada / telah dinyatakan tetapi belum diberi nilai.Untuk memeriksa apakah variabel telah dideklarasikan, Anda dapat menggunakan
typeof
, metode lain untuk memeriksa apakah ada variabel akan meningkatkan kesalahan yang sama yang Anda dapatkan pada awalnya.Ini memeriksa jenis nilai yang disimpan di
x
. Ini hanya akan kembaliundefined
ketikax
belum dinyatakan OR jika telah dinyatakan dan belum ditetapkan.sumber
typeof
operator.The
void
Operator kembaliundefined
untuk setiap argumen / ekspresi berlalu untuk itu. sehingga Anda dapat menguji hasilnya (sebenarnya beberapa minifiers mengubah kode Anda dariundefined
menjadivoid 0
untuk menyimpan beberapa karakter)Sebagai contoh:
sumber
typeof
dan berpikirundefined
dapat dipindahkan, yang tidak mungkin terjadi selama sekitar satu dekade.undefined
, karena hanya Tuhan yang tahu alasannya, menggunakanvoid 0
akan selalu kembaliundefined
terlepas dari apa pun.Kami dapat memeriksa
undefined
sebagai berikutsumber
Lakukan sesuatu seperti di bawah ini:
dan menyebutnya seperti:
sumber
Jawaban yang diterima benar. Hanya ingin menambahkan satu opsi lagi. Anda juga dapat menggunakan
try ... catch
blokir untuk menangani situasi ini. Contoh aneh:Waspadai
catch
blok, yang agak berantakan, karena menciptakan lingkup level blok. Dan, tentu saja, contohnya sangat disederhanakan untuk menjawab pertanyaan yang diajukan, itu tidak mencakup praktik terbaik dalam penanganan kesalahan;).sumber
Saya menggunakan fungsi kecil untuk memverifikasi variabel telah dideklarasikan, yang benar-benar mengurangi jumlah kekacauan dalam file javascript saya. Saya menambahkan tanda centang untuk nilai untuk memastikan bahwa variabel tidak hanya ada, tetapi juga telah diberi nilai. Kondisi kedua memeriksa apakah variabel juga telah dipakai, karena jika variabel telah didefinisikan tetapi tidak dipakai (lihat contoh di bawah), itu masih akan menimbulkan kesalahan jika Anda mencoba untuk referensi itu nilainya dalam kode Anda.
Tidak dipakai -
var my_variable;
Instantiated -var my_variable = "";
Anda kemudian dapat menggunakan pernyataan kondisional untuk menguji bahwa variabel telah didefinisikan DAN dipakai seperti ini ...
atau untuk menguji bahwa itu belum didefinisikan dan digunakan instantiated ...
sumber
return typeof el !== "undefined" && typeof el.val() !== "undefined"