Javascript - javascript verifică dacă există o variabilă (definită

Operatorul de tip verifică dacă variabila este definită.

Operatorul de tip. spre deosebire de alți operatori, nu generează o excepție ReferenceError atunci când este utilizată cu o variabilă nedeclarată.







Cu toate acestea, rețineți că tipul null va reveni la "obiect". Trebuie să fim atenți pentru a evita eroarea inițializării variabilei la nul. Pentru a fi în siguranță, putem folosi în schimb:

@StevenPenny Acum. Totul a început foarte diferit, apoi OP a editat-o ​​până aproape sa schimbat. - ZAD-Man 19 mai 17 la 10:12

E destul de prost, dar. - TrojanByAccident 19 mai la 17:12

@SamuelLiew Pot, dar primul este de fapt adevărat (și legitim) și nu are nimic de-a face cu întrebarea === împotriva ==. - Alnitak 19 mai 17 la 10:12

Dacă (! Variable_here) ; Nu se poate determina dacă o variabilă este falsă sau nedefinită. - boh 19 mai 17 la 10:12

StackOverflow sunt răspunsurile corecte, nu pictogramele. În plus, nimeni nu ar trebui să numească vreodată o variabilă nedefinită. Nu pot să cred că asta funcționează. - Cory Danielson 19 mai la 17:12

dacă (! variable_here) va fi întreruptă în multe cazuri. Dacă variabila este 0 sau falsă, aceasta nu va fi executată. Nu e ceea ce vrei. - Cory Danielson 19 mai la 17:12

Nu poate decide dacă să voteze. Strict vorbind, tipul de foo === "undefined" este corect și mai bun decât răspunsul votat la cel mai înalt nivel, însă notele suplimentare fac ca acest răspuns să fie confuz. - Alnitak 19 mai 17 la 10:12

@Said nedefinit poate fi înlocuit. De exemplu: undefined = false; undefined = true; Răspunsul este singura modalitate sigură de a vă asigura că variabila nu este definită cu adevărat. - Samuel Liew 19 mai la 17:12

@SamuelLiew IMHO ar fi bine să ștergeți ambele note. Ce înseamnă compararea cu o variabilă care conține "nedefinit"? Utilizarea === în loc de == este o practică foarte bună, dar rațiunea dvs. este motivul pentru care nu are sens. - Alnitak 19 mai 17 la 10:12

variabila === undefined funcționează bine - TrojanByAccident 19 mai 17 la 10:12

În cele mai multe cazuri, trebuie să utilizați:

Spre deosebire de simplu dacă (elem). permite 0. false. NaN și ". dar respinge nul sau nedefinit. ceea ce face ca acesta să fie un bun test general pentru prezența unui argument sau a unei proprietăți obiect.

Alte verificări sunt, de asemenea, incorecte, folosesc doar metode diferite:

dacă (elem). poate fi folosit dacă elem este garantat a fi un obiect, sau dacă este fals. 0, și așa mai departe.Acestea sunt considerate valori implicite (prin urmare, ele sunt echivalente cu nedefinit sau nul).

tipul de elem == 'undefined' poate fi folosit atunci când valoarea nul specificată are o valoare specifică pentru o variabilă sau o proprietate neinitializată.

  • Acesta este singurul test care nu va provoca o eroare dacă elementul nu este declarat (adică nu var, nu fereastră. Sau nu este un argument pentru această funcție). Aceasta, după părerea mea, este destul de periculoasă, pentru că permite misplacerile să alunece neobservate. Pentru a evita acest lucru, consultați următoarea metodă.






De asemenea, util pentru a compara cu nedefinit.

Cu toate acestea, deoarece nedefinitul global poate fi anulat de o altă valoare, este mai bine să se declare variabila nedefinită în regiunea curentă înainte de a fi utilizată:

Al doilea avantaj al acestei metode este faptul că mini-filtrele JS pot reduce variabila nedefinită la un singur caracter, salvând câteva octeți de fiecare dată.

răspunsul dat de David Tang în 19 mai 17 la 10:12

Din cauza acestei probleme imperative, ar trebui să utilizați ÎNTOTDEAUNEAVERE (0) în loc de nedefinit. - Barth Zalewski 19 mai 17 la 10:12

Acest lucru provoacă o excepție și necesită utilizarea ferestrei. Înainte de o variabilă, dacă este utilizată într-un context global. aceasta nu este cea mai bună cale. - Alex W 19 mai la 17:12

Acesta ar trebui să fie răspunsul acceptat. Comparația cu nedefinit și cu utilizarea de tip în cele mai multe cazuri este fie absolut nu este necesar, sau făcut în mod incorect. Programare - despre fiabilitate, ușor de citit, ușor de întreținut. Nu despre fantezie. - jose.angel.jimenez 19 mai 17 la 10:12

Cum să verificați dacă există o variabilă

Aceasta este o soluție de test destul de neagră dacă variabila există și a fost inițializată:

Este cel mai des folosit împreună cu un operator ternar pentru a seta valoarea implicită.În cazul în care o variabilă nu a fost inițializată:

Probleme cu încapsularea

Din păcate, nu puteți pur și simplu încapsula validarea într-o funcție.

S-ar putea să vă gândiți să faceți ceva de genul acesta:

Cu toate acestea, dacă apelați, de exemplu, aceasta va duce la o eroare de legătură. isset (foo) și variabila foo nu este definită, deoarece nu puteți trece o variabilă de funcție inexistentă:

RecomandatEroror nepregătit: nu este definit

Testarea parametrilor nedefiniți ai unei funcții

Deși funcția noastră isset nu poate fi folosită pentru a verifica prezența sau absența unei variabile (din motivele descrise mai sus), aceasta ne permite să verificăm dacă parametrii funcției sunt definiți:

În ciuda faptului că valoarea y nu este trecută de funcția de testare. funcția noastră isset funcționează bine în acest context, deoarece y este cunoscută în funcția de test ca valoare nedefinită.

O alternativă la răspunsurile de tip multiple utilizează hasOwnProperty (). care, desigur, verifică dacă obiectul (aproape toate în JS) are o proprietate, adică o variabilă (printre altele).

Metoda hasOwnProperty () returnează o valoare booleană care indică dacă obiectul are proprietatea specificată ca proprietate (nu este moștenită).

Fiecare obiect derivă dintr-un obiect. Moșteneste metoda hasOwnProperty (). Această metodă poate fi utilizată pentru a determina dacă un obiect are proprietatea specificată ca proprietate directă a acestui obiect; Spre deosebire de operatorul din. această metodă nu verifică lanțul prototip al obiectului.

Ce este minunat despre hasOwnProperty (). așa că atunci când o numim, nu folosim o variabilă care nu este încă definită, care, desigur, este jumătate din problemă.

Deși nu întotdeauna perfect sau ideal. în anumite circumstanțe este doar muncă!

Excelenta imbunatatire, simpla rapid de înțeles, vă mulțumesc! - CPHPython 19 mai 17 la 10:13

@CPHPython Editat; În regulă? - Fred Gandt 19 mai la 17:13

Plăcerea de a lucra cu tine ;-) - Fred Gandt 19 mai 17 la 10:13

Aceasta este o alternativă teribilă și ar trebui să fie pe lângă această problemă. Vă rugăm să simplificați antetul de răspuns cu un exemplu de lucru care întoarce adevărat (de exemplu, window.hasOwnProperty ('console') sau var hop = 'p'; window.hasOwnProperty ('hop')). - CPHPython 19 mai 17 la 10:13

Nu este nevoie să definiți o funcție de explicație, oamenii o vor înțelege imediat și un răspuns scurt va fi mai rapid de citit. Dacă vreți să lăsați un fragment, lăsați două linii pe el, primul specifică var și cel de-al doilea imprimă rezultatul. - CPHPython 19 mai 17 la 10:13

Este dificil să distingi un termen nedeterminat de zero. Null este o valoare pe care o puteți atribui unei variabile dacă doriți să specificați că variabila nu are niciun sens. Undefined este o valoare specială care va fi valoarea implicită pentru variabilele neasignate.

răspunsul dat de Jith la 19 mai 17 la 10:12

Ar fi util să afișați ieșirile încorporate ale fiecărui avertisment. - demisx 19 mai la 17:12

@demisx A fost de acord, dar în loc să ofere editarea, de ce nu doar să o faci? Opțiunea există din anumite motive. Unii ar putea considera că este nepoliticos; Consider că acest lucru este eficient - așa că am redactat singur răspunsul (în așteptarea revizuirii). - Fred Gandt 19 mai la 17:12







Trimiteți-le prietenilor: