Welche Methode zur Überprüfung, ob eine Variable initialisiert wurde, ist besser/richtiger? (Angenommen, die Variable könnte irgendetwas enthalten (String, Int, Objekt, Funktion usw.))
if (elem) { // or !elem
oder
if (typeof(elem) !== 'undefined') {
oder
if (elem != null) {
Sie wollen den typeof
-Operator. Genauer gesagt:
if (typeof variable !== 'undefined') {
// the variable is defined
}
In der Mehrzahl der Fälle würden Sie verwenden:
elem != null
Anders als ein einfaches if (elem)
erlaubt es 0
, false
, NaN
und ''
, lehnt aber null
oder undefined
ab, was es zu einem guten, allgemeinen Test für das Vorhandensein eines Arguments oder einer Eigenschaft eines Objekts macht.
Die anderen Prüfungen sind auch nicht falsch, sie haben nur andere Verwendungszwecke:
if (elem)
: kann verwendet werden, wenn elem
garantiert ein Objekt ist, oder wenn false
, 0
, etc. als "Standard"-Werte angesehen werden (daher äquivalent zu undefined
oder null
).
typeof elem == 'undefined'
kann in Fällen verwendet werden, in denen ein angegebenes null
eine andere Bedeutung als eine nicht initialisierte Variable oder Eigenschaft hat.
Dies ist die einzige Prüfung, die keinen Fehler auslöst, wenn elem
nicht deklariert ist (d.h. keine var
-Anweisung, keine Eigenschaft von window
, oder kein Funktionsargument). Dies ist meiner Meinung nach ziemlich gefährlich, da sich so Tippfehler unbemerkt einschleichen können. Um dies zu vermeiden, siehe die folgende Methode.
Nützlich ist auch ein strenger Vergleich gegen undefined
:
if (elem === undefined) ...
Da die globale Variable undefined
jedoch mit einem anderen Wert überschrieben werden kann, ist es am besten, die Variable undefined
im aktuellen Bereich zu deklarieren, bevor sie verwendet wird:
var undefined; // really undefined
if (elem === undefined) ...
Oder:
(function (undefined) {
if (elem === undefined) ...
})();
Ein sekundärer Vorteil dieser Methode ist, dass JS-Minifier die "undefinierte" Variable auf ein einziges Zeichen reduzieren können, was jedes Mal ein paar Bytes spart.
Es kommt darauf an, ob Sie sich nur dafür interessieren, dass die Variable definiert wurde, oder ob Sie wollen, dass sie einen sinnvollen Wert hat.
Die Prüfung, ob der Typ undefiniert ist, prüft, ob die Variable bereits definiert wurde.
Mit === null
oder !== null
wird nur geprüft, ob der Wert der Variablen genau null
ist.
== null
oder != null
prüft, ob der Wert undefined
oder null
ist.
if(value)
prüft, ob die Variable undefined
, null
, 0
oder ein leerer String ist.