Saya ingin memeriksa apakah variabelnya didefinisikan atau tidak. Misalnya, berikut ini melempar kesalahan yang tidak didefinisikan
alert( x );
Bagaimana saya bisa menangkap kesalahan ini?
Saya ingin memeriksa apakah variabelnya didefinisikan atau tidak. Misalnya, berikut ini melempar kesalahan yang tidak didefinisikan
alert( x );
Bagaimana saya bisa menangkap kesalahan ini?
Jawaban:
Dalam JavaScript, null
adalah sebuah objek. Ada nilai lain untuk hal-hal yang tidak ada undefined
,. DOM kembali null
untuk hampir semua kasus di mana gagal menemukan beberapa struktur dalam dokumen, tetapi dalam JavaScript sendiri undefined
adalah nilai yang digunakan.
Kedua, tidak, tidak ada padanan langsung. Jika Anda benar-benar ingin memeriksa secara spesifik null
, lakukan:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Jika Anda ingin memeriksa apakah suatu variabel ada, itu hanya dapat dilakukan dengan try
/ catch
, karena typeof
akan memperlakukan variabel yang tidak dideklarasikan dan variabel yang dideklarasikan dengan nilai undefined
setara.
Tetapi, untuk memeriksa apakah suatu variabel dinyatakan dan tidak undefined
:
if (yourvar !== undefined) // Any scope
Sebelumnya, perlu menggunakan typeof
operator untuk memeriksa tidak terdefinisi dengan aman, karena itu mungkin untuk menetapkan kembali undefined
seperti variabel. Cara lama terlihat seperti ini:
if (typeof yourvar !== 'undefined') // Any scope
Masalah undefined
penugasan kembali diperbaiki di ECMAScript 5, yang dirilis pada 2009. Sekarang Anda dapat menggunakan ===
dan !==
menguji dengan aman undefined
tanpa menggunakan typeof
seperti yang undefined
telah dibaca-hanya untuk beberapa waktu.
Jika Anda ingin tahu apakah ada anggota yang independen tetapi tidak peduli apa nilainya:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Jika Anda ingin mengetahui apakah suatu variabel adalah truthy :
if (yourvar)
typeof
operator ( typeof null == 'object'
). The null
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.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Beberapa solusi lain di utas ini akan membuat Anda percaya bahwa suatu variabel tidak terdefinisi meskipun telah didefinisikan (dengan nilai NULL atau 0, misalnya).
ReferenceError
.
undefined
objek dalam javascript adalah informasi yang salah. Apakah pernyataan ini berhubungan dengan jawaban Anda? Ini adalah nilai undefined
tipe undefined
, ditugaskan ke pengenal global bernama undefined
.
undefined
telah dibaca hanya sejak ES5. Anda dapat dengan aman menguji terdefinisi menggunakan if (x === undefined) {...}
atau menggunakan singkatan seperti ini: if (x === void 0)
.
Secara teknis, solusi yang tepat adalah (saya percaya):
typeof x === "undefined"
Anda terkadang bisa malas dan menggunakannya
x == null
tetapi itu memungkinkan kedua variabel x yang tidak didefinisikan, dan variabel x yang berisi nol, untuk mengembalikan true.
var x;
dan kemudian typeof x;
Anda akan mendapatkan "undefined"
seperti jika Anda melakukannyatypeof lakjdflkdsjflsj;
Versi yang lebih mudah dan lebih singkat adalah:
if (!x) {
//Undefined
}
ATAU
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Saya sudah sering melakukan:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Anda juga dapat menggunakan operator kondisional ternary:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Anda harus memeriksa bahwa jika a===undefined
sebaliknya
var x;
melakukan di atas akan menimbulkan kesalahan
!a
menguji true untuk undefined
, itu juga menguji true untuk 0
dan null
dan false
. Ini sangat salah dan harus dihapus.
Saya sering menggunakan cara paling sederhana:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
EDIT:
Tanpa menginisialisasi variabel, pengecualian akan dilemparkan "Uncaught ReferenceError: variabel tidak didefinisikan ..."
Uncaught ReferenceError: variable is not defined
variable
didefinisikan oleh var variable;
. Dan cuplikan ini akan menimpa variable
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.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Ini tidak akan melakukan itu.
Kesalahan memberitahu Anda bahwa x
itu bahkan tidak ada! Itu belum dideklarasikan , yang berbeda dari diberi nilai.
var x; // declaration
x = 2; // assignment
Jika Anda menyatakan x
, Anda tidak akan mendapatkan kesalahan. Anda akan mendapatkan lansiran yang mengatakan undefined
karena x
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.
if(typeof x !== "undefined") {
alert(x);
}
Ini memeriksa jenis nilai yang disimpan di x
. Ini hanya akan kembali undefined
ketika x
belum dinyatakan OR jika telah dinyatakan dan belum ditetapkan.
typeof
operator.
The void
Operator kembali undefined
untuk setiap argumen / ekspresi berlalu untuk itu. sehingga Anda dapat menguji hasilnya (sebenarnya beberapa minifiers mengubah kode Anda dari undefined
menjadi void 0
untuk menyimpan beberapa karakter)
Sebagai contoh:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
dan berpikir undefined
dapat dipindahkan, yang tidak mungkin terjadi selama sekitar satu dekade.
undefined
, karena hanya Tuhan yang tahu alasannya, menggunakan void 0
akan selalu kembali undefined
terlepas dari apa pun.
Jawaban yang diterima benar. Hanya ingin menambahkan satu opsi lagi. Anda juga dapat menggunakan try ... catch
blokir untuk menangani situasi ini. Contoh aneh:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
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;).
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 = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Anda kemudian dapat menggunakan pernyataan kondisional untuk menguji bahwa variabel telah didefinisikan DAN dipakai seperti ini ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
atau untuk menguji bahwa itu belum didefinisikan dan digunakan instantiated ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"