Cum se verifică nedefinit în JavaScript

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *