Ktorý spôsob kontroly, či bola premenná inicializovaná, je lepší/správnejší? (Za predpokladu, že premenná môže obsahovať čokoľvek (reťazec, int, objekt, funkciu atď.))
if (elem) { // or !elem
alebo
if (typeof(elem) !== 'undefined') {
alebo
if (elem != null) {
Chcete operátor typeof
. Konkrétne:
if (typeof variable !== 'undefined') {
// the variable is defined
}
Vo väčšine prípadov by ste mali použiť:
elem != null
Na rozdiel od jednoduchého if (elem)
umožňuje 0
, false
, NaN
a ''
, ale odmieta null
alebo undefined
, čo z neho robí dobrý, všeobecný test prítomnosti argumentu alebo vlastnosti objektu.
Ani ostatné kontroly nie sú nesprávne, len majú iné použitie:
if (elem)
: možno použiť, ak je elem
zaručene objekt, alebo ak sú false
, 0
atď. považované za "predvolené" hodnoty (teda ekvivalentné s undefined
alebo null
).
Funkciu typeof elem == 'undefined'
možno použiť v prípadoch, keď má zadaná hodnota null
odlišný význam ako neinicializovaná premenná alebo vlastnosť.
Toto je jediná kontrola, ktorá nevyhodí chybu, ak elem
nie je deklarovaný (t. j. nemá príkaz var
, nie je vlastnosťou okna
alebo nie je argumentom funkcie). To je podľa môjho názoru dosť nebezpečné, pretože to umožňuje, aby preklepy unikli bez povšimnutia. Ak sa tomu chcete vyhnúť, pozrite si nasledujúcu metódu.
Užitočné je aj striktné porovnávanie s undefined
:
if (elem === undefined) ...
Keďže však globálna premenná undefined
môže byť prepísaná inou hodnotou, je najlepšie pred jej použitím deklarovať premennú undefined
v aktuálnom rozsahu:
var undefined; // really undefined
if (elem === undefined) ...
Alebo:
(function (undefined) {
if (elem === undefined) ...
})();
Druhou výhodou tejto metódy je, že minifiery JS dokážu premennú undefined
zredukovať na jeden znak, čím vždy ušetria niekoľko bajtov.
Záleží na tom, či vám záleží len na tom, aby bola premenná definovaná, alebo chcete, aby mala zmysluplnú hodnotu.
Kontrola typu undefined skontroluje, či premenná už bola definovaná.
=== null
alebo !== null
skontroluje len to, či je hodnota premennej presne null
.
== null
alebo != null
skontroluje, či je hodnota premennej nedefinovaná
alebo null
.
if(value)
skontroluje, či je premenná undefined
, null
, 0
alebo prázdny reťazec.