Atunci când o variabilă este declarată fără a i se atribui o valoare, valoarea inițială este undefined
.
Cum verificați dacă o valoare este undefined
în JavaScript?
Răspunsul scurt
În browserele moderne puteți compara în siguranță variabila direct la undefined
:
Unii oameni se opun comparării cu undefined
deoarece browserele vechi au permis ca valoarea sa să fie reatribuită astfel:
După această reatribuire, comparând cu undefined
direct nu ar mai detecta corect dacă unei variabile i s-a atribuit o valoare.
Cu toate acestea, acest comportament a fost remediat în 2009 cu ECMAScript 5:
În browserele moderne Nu mai este posibil să reatribuiți valoarea undefined
globală.
Ce se întâmplă dacă trebuie să accept IE8 și versiunile anterioare?
În general, comparându-se direct cu un definit este încă sigur. Nu există niciun motiv practic pentru o aplicație care să aloce din nou valoarea undefined
.
Thomas Eding demonstrează acest lucru printr-o analogie convingătoare:
Dacă sunteți în continuare preocupat, există două moduri de a verifica dacă o valoare este nedefinită, chiar dacă undefined
global a fost suprascris.
Puteți utiliza operatorul nul pentru a obține valoarea undefined
. Acest lucru va funcționa chiar dacă valoarea globală window.undefined
a fost suprascrisă:
Zeroul din acest exemplu nu are nicio semnificație specială, la fel de bine puteți utiliza 1
sau function(){}
. void(anything)
va evalua întotdeauna la undefined
.
Alternativ, puteți utiliza operatorul de tip pentru a verifica în siguranță dacă o valoare a fost repartizat. În loc să comparați cu valoarea globală undefined
, verificați dacă valoarea „tipului s este” nedefinită „:
Rețineți că acest lucru este ușor diferit de opțiunile anterioare. Chiar dacă name
nu a fost declarat typeof
ar spune totuși că este nedefinit. Dacă ați comparat o variabilă nedeclarată cu undefined
sau void(0)
veți obține în schimb o ReferenceError.
Dar nu trebuie folosiți direct void (0)
Evitați să folosiți textul void(0)
sau typeof x === "undefined"
în cod. Aceste expresii nu se explică de la sine și ar trebui să fie înfășurate într-o funcție isUndefined ca aceasta:
Multe biblioteci utilitare au deja această funcționalitate încorporată, de exemplu există un _.isUndefined
funcție în Underscore.js.