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, nulladalah sebuah objek. Ada nilai lain untuk hal-hal yang tidak ada undefined,. DOM kembali nulluntuk hampir semua kasus di mana gagal menemukan beberapa struktur dalam dokumen, tetapi dalam JavaScript sendiri undefinedadalah 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 typeofakan memperlakukan variabel yang tidak dideklarasikan dan variabel yang dideklarasikan dengan nilai undefinedsetara.
Tetapi, untuk memeriksa apakah suatu variabel dinyatakan dan tidak undefined:
if (yourvar !== undefined) // Any scope
Sebelumnya, perlu menggunakan typeofoperator untuk memeriksa tidak terdefinisi dengan aman, karena itu mungkin untuk menetapkan kembali undefinedseperti variabel. Cara lama terlihat seperti ini:
if (typeof yourvar !== 'undefined') // Any scope
Masalah undefinedpenugasan kembali diperbaiki di ECMAScript 5, yang dirilis pada 2009. Sekarang Anda dapat menggunakan ===dan !==menguji dengan aman undefinedtanpa menggunakan typeofseperti yang undefinedtelah 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)
typeofoperator ( typeof null == 'object'). The nullnilai adalah nilai primitif , yang merupakan satu-satunya nilai dari jenis Null .
Satu-satunya cara untuk benar-benar menguji apakah suatu variabel undefinedadalah 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.
undefinedobjek dalam javascript adalah informasi yang salah. Apakah pernyataan ini berhubungan dengan jawaban Anda? Ini adalah nilai undefinedtipe undefined, ditugaskan ke pengenal global bernama undefined.
undefinedtelah 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===undefinedsebaliknya
var x; melakukan di atas akan menimbulkan kesalahan
!amenguji true untuk undefined, itu juga menguji true untuk 0dan nulldan 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
variabledidefinisikan oleh var variable;. Dan cuplikan ini akan menimpa variabledalam 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 windowobjek. 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 xitu 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 undefinedkarena xada / 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 undefinedketika xbelum dinyatakan OR jika telah dinyatakan dan belum ditetapkan.
typeofoperator.
The voidOperator kembali undefineduntuk setiap argumen / ekspresi berlalu untuk itu. sehingga Anda dapat menguji hasilnya (sebenarnya beberapa minifiers mengubah kode Anda dari undefinedmenjadi void 0untuk menyimpan beberapa karakter)
Sebagai contoh:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeofdan berpikir undefineddapat dipindahkan, yang tidak mungkin terjadi selama sekitar satu dekade.
undefined, karena hanya Tuhan yang tahu alasannya, menggunakan void 0akan selalu kembali undefinedterlepas dari apa pun.
Jawaban yang diterima benar. Hanya ingin menambahkan satu opsi lagi. Anda juga dapat menggunakan try ... catchblokir 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 catchblok, 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"