Katera metoda preverjanja, ali je bila spremenljivka inicializirana, je boljša/pravilna? (Ob predpostavki, da lahko spremenljivka vsebuje karkoli (niz, int, predmet, funkcijo itd.))
if (elem) { // or !elem
ali
if (typeof(elem) !== 'undefined') {
ali
if (elem != null) {
Želite operator typeof
. Natančneje:
if (typeof variable !== 'undefined') {
// the variable is defined
}
V večini primerov uporabite:
elem != null
Za razliko od preprostega if (elem)
dopušča 0
, false
, NaN
in ''
, zavrača pa null
ali undefined
, zato je dober, splošen test za prisotnost argumenta ali lastnosti objekta.
Tudi druga preverjanja niso napačna, le različno se uporabljajo:
(elem): se lahko uporabi, če je
elemzajamčeno objekt ali če
false,
0itd. veljajo za "privzete" vrednosti (torej enakovredno
undefinedali
null`).
typeof elem == 'undefined'
lahko uporabimo v primerih, ko ima določen null
drugačen pomen kot neinicializirana spremenljivka ali lastnost.
To je edino preverjanje, ki ne vrže napake, če elem
ni deklariran (tj. ni izjave var
, ni lastnost okna
ali ni argument funkcije). To je po mojem mnenju precej nevarno, saj omogoča, da se tipkarske napake spregledajo neopaženo. Če se želite temu izogniti, si oglejte spodnjo metodo.
Uporabna je tudi stroga primerjava z undefined
:
if (elem === undefined) ...
Ker pa lahko globalno spremenljivko undefined
prepišemo z drugo vrednostjo, je najbolje, da spremenljivko undefined
pred uporabo deklariramo v trenutnem obsegu:
var undefined; // really undefined
if (elem === undefined) ...
Ali:
(function (undefined) {
if (elem === undefined) ...
})();
Dodatna prednost te metode je, da lahko programi za zmanjševanje JS spremenljivko undefined
zmanjšajo na en sam znak, s čimer vsakič prihranite nekaj bajtov.
Odvisno od tega, ali vam je pomembno le, da je spremenljivka definirana, ali pa želite, da ima smiselno vrednost.
Če preverite, ali je tip nedefiniran, boste preverili, ali je bila spremenljivka že definirana.
=== null
ali !== null
bo preveril le, ali je vrednost spremenljivke natanko null
.
== null
ali != null
preveri, ali je vrednost spremenljivke nedefinirana
ali null
.
if(value)
bo preveril, ali je spremenljivka neopredeljena
, null
, 0
ali prazen niz.