Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 48
3.5null und undefined
Оглавлениеnull ist ein Schlüsselwort, das zu einem speziellen Wert ausgewertet wird, der üblicherweise das Fehlen eines Werts anzeigt. Wird der typeof-Operator auf null angewandt, erhält man als Ergebnis den String »object«. Das zeigt an, dass null als spezieller Objektwert betrachtet werden kann, der »kein Objekt« bedeutet. In der Praxis wird null normalerweise jedoch als einziges Exemplar seines eigenen Typs betrachtet und kann ebenso eingesetzt werden, um »kein Wert« für Zahlen oder Strings anzuzeigen. Die meisten Programmiersprachen besitzen ein Äquivalent zu JavaScripts null: Vielleicht kennen Sie es als NULL, nil oder None.
JavaScript kennt noch einen weiteren Wert, der das Fehlen eines Werts anzeigt. undefined steht für ein grundlegenderes Fehlen. Es ist der Wert von Variablen, die noch nicht initialisiert wurden, und ebenfalls das Ergebnis, wenn Sie den Wert einer Objekteigenschaft oder eines Array-Elements abfragen, die bzw. das es nicht gibt. Der Wert undefined ist auch der Rückgabewert von Funktionen, die nicht explizit einen Wert zurückgeben, und der Wert von Funktionsparametern, für die kein Argument übergeben wird. undefined ist eine vordefinierte globale Konstante (also kein Sprachschlüsselwort wie null, obwohl das in der Praxis keine große Rolle spielt), die mit dem Wert undefined initialisiert wird. Wendet man den typeof-Operator auf den Wert undefined an, liefert er »undefined«. Das zeigt an, dass dieser Wert das einzige Exemplar eines speziellen Typs ist.
Trotz dieser Unterschiede können null und undefined beide das Fehlen eines Werts anzeigen und sind häufig gegeneinander austauschbar. Der Gleichheitsoperator == betrachtet sie als gleich. (Verwenden Sie den strengen Gleichheitsoperator ===, um sie zu unterscheiden.) Beides sind falsy-Werte: Sie verhalten sich wie false, wenn ein boolescher Wert gefordert ist. Weder null noch undefined besitzt irgendwelche Eigenschaften oder Methoden. Greift man mit . oder [] auf eine Eigenschaft oder Methode dieser Werte zu, erhält man einen TypeError.
Man könnte undefined als Zeichen für das systembasierte, unerwartete oder fehlerhafte Fehlen eines Werts betrachten und null als Zeichen für ein programmbasiertes, erwartetes oder normales Fehlen eines Werts. Ich vermeide die Verwendung von null und undefined möglichst, aber wenn ich einen dieser Werte einer Variablen oder Eigenschaft zuweisen oder an eine Funktion übergeben oder aus einer Funktion zurückgeben muss, verwende ich normalerweise null. Einige Programmierer bemühen sich, null gänzlich zu vermeiden und an seiner Stelle möglichst immer undefined zu benutzen.