Która metoda sprawdzania czy zmienna została zainicjalizowana jest lepsza/poprawna? (Zakładając, że zmienna może zawierać cokolwiek (string, int, obiekt, funkcję, itd.))
if (elem) { // or !elem
lub
if (typeof(elem) !== 'undefined') {
lub
if (elem != null) {
Chcesz operator typeof
. Konkretnie:
if (typeof variable !== 'undefined') {
// the variable is defined
}
W większości przypadków używałbyś:
elem != null
W przeciwieństwie do prostego if (elem)
, pozwala on na 0
, false
, NaN
i ''
, ale odrzuca null
lub undefined
, co czyni go dobrym, ogólnym testem na obecność argumentu lub właściwości obiektu.
Inne kontrole również nie są niepoprawne, po prostu mają inne zastosowania:
if (elem)
: może być użyte jeśli elem
jest gwarantowane jako obiekt, lub jeśli false
, 0
, etc. są uważane za "domyślne" wartości (stąd odpowiednik undefined
lub null
).
Opcja typeof elem == 'undefined'
może być użyta w przypadkach, gdy określony null
ma inne znaczenie niż niezainicjalizowana zmienna lub właściwość.
Jest to jedyne sprawdzenie, które nie wyrzuci błędu jeśli elem
nie jest deklarowany (tzn. nie ma deklaracji var
, nie jest właściwością window
, lub nie jest argumentem funkcji). Jest to, moim zdaniem, dość niebezpieczne, ponieważ pozwala literówkom przemknąć niezauważone. Aby tego uniknąć, zobacz poniższą metodę.
Przydatne jest również ścisłe porównanie z undefined
:
if (elem === undefined) ...
Ponieważ jednak globalne undefined
może być nadpisane inną wartością, najlepiej jest zadeklarować zmienną undefined
w bieżącym zakresie przed jej użyciem:
var undefined; // really undefined
if (elem === undefined) ...
Lub:
(function (undefined) {
if (elem === undefined) ...
})();
Dodatkową zaletą tej metody jest to, że minifiery JS mogą zredukować zmienną undefined
do jednego znaku, oszczędzając kilka bajtów za każdym razem.
To zależy, czy zależy ci tylko na tym, że zmienna została zdefiniowana, czy chcesz, aby miała znaczącą wartość.
Sprawdzenie, czy typ jest niezdefiniowany sprawdzi, czy zmienna została już zdefiniowana.
== null
lub !== null
sprawdzi tylko czy wartość zmiennej jest dokładnie null
.
== null
lub != null
sprawdzi czy wartość jest undefined
lub null
.
if(wartość)
sprawdzi czy zmienna jest undefined
, null
, 0
, lub pustym łańcuchem.