Kako provjeriti nedefiniranu varijablu u javascriptu

Htio sam provjeriti je li varijabla definirana ili ne. Na primjer, slijedeće proizvodi nedefiniranu pogrešku.

 alert( x ); 

Kako mogu uhvatiti ovu pogrešku?

803
13 мая '09 в 17:09 2009-05-13 17:09 Jineesh je pitao 13. svibnja 2009. u 17:09 2009-05-13 17:09
@ 14 odgovora

U JavaScriptu je null objekt. Postoji još jedna vrijednost za stvari koje ne postoje, undefined . DOM vraća null gotovo svim slučajevima gdje nije moguće pronaći strukturu u dokumentu, ali sama vrijednost nije undefined u samom JavaScriptu.

Drugo, ne, nema izravnog ekvivalenta. Ako doista želite provjeriti za null , učinite:

 if (yourvar === null) // Does not execute if yourvar is 'undefined' 

Ako želite provjeriti postoji li varijabla, to se može učiniti samo s try / catch , jer typeof će obraditi neprijavljenu varijablu i varijablu koja je deklarirana s vrijednošću undefined kao ekvivalent.

No, za provjeru je li varijabla deklarirana i nije undefined :

 if (typeof yourvar !== 'undefined') // Any scope 

Ako znate da varijabla postoji, a želite provjeriti ima li u njoj bilo kakve vrijednosti:

 if (yourvar !== undefined) 

Ako želite znati je li član samostalno, ali ne zanima njegovo značenje:

 if ('membername' in object) // With inheritance if (object.hasOwnProperty('membername')) // Without inheritance 

Ako želite znati je li varijabla istinita :

 if (yourvar) 

Izvor

1550
13 мая '09 в 17:11 2009-05-13 17:11 odgovor je dao Natrium 13. svibnja u 17:11 2009-05-13 17:11

Jedini način da provjerite je li varijabla undefined je sljedeći. Zapamtite da je nedefiniran objekt u javascriptu.

 if (typeof someVar === 'undefined') { // Your variable is undefined } 
border=0

Neka druga rješenja u ovoj niti će vas uvjeriti da je varijabla nedefinirana, iako je definirana (s vrijednošću NULL ili 0, na primjer).

312
13 мая '09 в 17:53 2009-05-13 17:53 odgovorio je Michaelu Walesu 13. svibnja 2009. u 17:53 2009-05-13 17:53

Tehnički, ispravna odluka (mislim):

 typeof x === "undefined" 

Ponekad možete biti lijeni i koristiti

 x == null 

ali to dopušta i undefined x varijablu i x varijablu koja sadrži null za vraćanje true.

61
13 мая '09 в 17:12 2009-05-13 17:12 Odgovor je dao Jason S dana 13. svibnja u 17:12 2009-05-13 17:12

Često sam to činio:

 function doSomething(variable) { var undef; if(variable === undef) { alert('Hey moron, define this bad boy.'); } } 
14
13 мая '09 в 17:45 2009-05-13 17:45 odgovorio je Joeu 13. svibnja u 17:45 2009-05-13 17:45

Još jednostavnija i kraća verzija:

 if (!x) { //Undefined } 

ILI

 if (typeof x !== "undefined") { //Do something since x is defined. } 
14
13 мая '09 в 17:26 2009-05-13 17:26 odgovor je dao Dmitri Farkov 13. svibnja u 17:26 2009-05-13 17:26

Također možete koristiti ternarni uvjetni operator:

3
12 февр. Odgovor je dao Ivan 12. veljače. 2016-02-12 15:02 '16 u 15:02 2016-02-12 15:02

Još jedno potencijalno "rješenje" jest korištenje window . Time se izbjegavaju problemi s pogreškama veze u pregledniku.

 if (window.x) { alert('x exists and is truthy'); } else { alert('x does not exist, or exists and is falsy'); } 
2
13 нояб. odgovor je dan ubershmekel 13. studenog 2017-11-13 23:16 '17 u 23:16 2017-11-13 23:16

Često koristim najlakši način:

 var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined'); } 

EDIT:

Bez inicijalizacije varijable, iznimka "Uncaught ReferenceError: variable nije definirana ..."

1
09 дек. odgovor dao mokiSRB 09 prosinca. 2015-12-09 11:44 '15 u 11:44 2015-12-09 11:44

void operator vraća vrijednost undefined za bilo koji argument / izraz koji je proslijeđen. tako da možete provjeriti rezultat (zapravo, neki miniferi mijenjaju vaš kod iz undefined u void 0 da bi sačuvali nekoliko znakova)

Na primjer:

 void 0 // undefined if (variable === void 0) { // variable is undefined } 
0
02 июля '18 в 17:07 2018-07-02 17:07 odgovor je dat svarog 02. srpnja u 17:07 2018-07-02 17:07

Samo učinite nešto kao u nastavku:

 function isNotDefined(value) { return typeof value === "undefined"; } 

i imenovati ga kao:

 isNotDefined(undefined); //return true isNotDefined('Alireza'); //return false 
0
31 янв. Odgovor daje Alireza 31. siječnja. 2019-01-31 15:08 '19 u 15:08 2019-01-31 15:08

Prihvaćeni odgovor je točan. Samo sam htio dodati još jednu opciju. Također možete koristiti try ... catch za obradu ove situacije. Fancy primjer:

 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 } 

Imajte na umu catch za catch , koji je pomalo neujednačen, jer stvara područje na razini bloka. I, naravno, primjer je iznimno pojednostavljen kako bi odgovorio na postavljeno pitanje, ne pokriva najbolje metode rješavanja pogrešaka;).

0
11 авг. odgovor dao Evgeny Savichev 11 kol. 2017-08-11 20:25 '17 u 20:25 2017-08-11 20:25

Možemo provjeriti undefined kako slijedi

 var x; if (x === undefined) { alert("x is undefined"); } else { alert("x is defined"); } 
0
04 июля '16 в 20:17 2016-07-04 20:17 odgovor je dao Arshid KV 4. srpnja 2011. u 20:17 2016-07-04 20:17

Koristim malu funkciju za provjeru je li deklarirana varijabla koja stvarno smanjuje količinu nereda u mojim javascript datotekama. Dodajem provjeru vrijednosti kako bih se uvjerio da varijabla ne postoji samo, već ima i dodijeljenu vrijednost. Drugi uvjet provjerava je li varijabla također stvorena, jer ako je varijabla definirana, ali nije izrađena (vidi primjer u nastavku), i dalje će generirati pogrešku ako pokušate uputiti na njezinu vrijednost u kodu.

Nije var my_variable; - var my_variable; Napravljeno - var my_variable = "";

 function varExists(el) { if ( typeof el !== "undefined"  typeof el.val() !== "undefined" ) { return true; } else { return false; } } 

Tada možete koristiti uvjetni operator da biste provjerili je li varijabla definirana i stvorena kao ...

 if ( varExists(variable_name) ) { // checks that it DOES exist } 

ili provjerite da nije definirana i da nije korištena ...

 if( !varExists(variable_name) ) { // checks that it DOESN'T exist } 
0
05 июля '18 в 20:48 2018-07-05 20:48 Odgovor je dao MistyDawn na Srpanj 05 '18 u 20:48 2018-07-05 20:48

Pogreška vam govori da x uopće ne postoji! Nije deklarirana , što se razlikuje od dodjele vrijednosti.

 var x; // declaration x = 2; // assignment 

Ako deklarirate x , nećete dobiti pogrešku. Dobit ćete upozorenje u kojem se navodi da je undefined jer x postoji / je deklarirano, ali nije dodijeljena vrijednost.

Da biste provjerili je li varijabla deklarirana, možete koristiti typeof , bilo koja druga metoda provjere postoji li varijabla uzrokovat će istu pogrešku koju ste primili na početku.

 if(typeof x !== "undefined") { alert(x); } 

Ovo je provjera vrste vrijednosti pohranjene u x . Vratit će se undefined samo ako x nije prijavljen OR, ako je deklariran i još nije dodijeljen.

0
10 янв. Odgovor je dao JBallin 10. siječnja 2018-01-10 09:33 '18 u 9:33 201-01-01 09:33