Die meisten Computersprachen haben einen und nur einen Wert, der „none“ darstellt, z. B. NULL in der C-Sprache, null in der Java-Sprache, None in der Python-Sprache und Null in der Ruby-Sprache.
Etwas seltsam ist, dass die JavaScript-Sprache tatsächlich zwei Werte hat, die „none“ darstellen: undefiniert und null. Warum ist das so?
1. Ähnlichkeit
Um ehrlich zu sein, macht es in JavaScript fast keinen Unterschied, eine Variable undefiniert oder null zuzuweisen.
var a = undefined; var a = null;
Im obigen Code wird die Variable a undefiniert bzw. null zugewiesen. Die beiden Schreibmethoden sind nahezu gleichwertig.
Undefiniert und null werden in der if-Anweisung automatisch in „falsch“ konvertiert, und der Gleichheitsoperator meldet sogar direkt, dass sie gleich sind.
if (!undefined) console.log('undefined is false'); // undefined is false if (!null) console.log('null is false'); // null is false undefined == null // true
Der obige Code zeigt, wie ähnlich die Verhaltensweisen der beiden sind!
Da die Bedeutung und Verwendung von undefiniert und null ähnlich sind, warum müssen Sie dann zwei solcher Werte gleichzeitig festlegen? Erhöht dies nicht ohne Grund die Komplexität von JavaScript und bereitet Anfängern Probleme? Die Dart-Sprache, ein Ersatz für die von Google entwickelte JavaScript-Sprache, schreibt eindeutig vor, dass es nur Null und kein Undefiniertes gibt!
2. Historische Gründe
Als ich kürzlich das neue Buch „Speaking JavaScript“ las, entdeckte ich zufällig die Antwort auf diese Frage!
Es stellt sich heraus, dass dies mit der Geschichte von JavaScript zu tun hat. Als JavaScript im Jahr 1995 geboren wurde, wurde zunächst wie Java nur Null als Wert für „Nichts“ festgelegt.
Gemäß der Tradition der C-Sprache ist null so konzipiert, dass es automatisch in 0 konvertiert wird.
Number(null) // 0 5 + null // 5
JavaScript-Designer Brendan Eich ist jedoch der Meinung, dass dies aus zwei Gründen nicht ausreicht.
Zunächst einmal wird null wie in Java als Objekt behandelt. Allerdings werden JavaScript-Datentypen in zwei Kategorien unterteilt: primitive Typen (primitiv) und zusammengesetzte Typen (komplex). Brendan Eich ist der Meinung, dass der Wert, der „none“ darstellt, am besten kein Objekt ist.
Zweitens enthielt die ursprüngliche Version von JavaScript keinen Fehlerbehandlungsmechanismus. Wenn eine Datentypinkongruenz auftritt, wird der Typ häufig automatisch konvertiert oder schlägt stillschweigend fehl. Brendan Eich ist der Meinung, dass es schwierig sein wird, Fehler zu finden, wenn null automatisch in 0 konvertiert wird.
Deshalb hat Brendan Eich ein weiteres Undefiniertes entworfen.
3. Erster Entwurf
Die ursprüngliche Version von JavaScript unterscheidet sich wie folgt: null ist ein Objekt, das „none“ darstellt und 0 ist, wenn es in einen numerischen Wert umgewandelt wird; undefiniert ist ein primitiver Wert, der „none“ darstellt und NaN ist, wenn es in einen numerischen Wert umgewandelt wird .
Number(undefined) // NaN 5 + undefined // NaN
4. Aktuelle Nutzung
Die obige Unterscheidung erwies sich in der Praxis jedoch schnell als nicht umsetzbar. Derzeit sind null und undefiniert grundsätzlich synonym, mit nur einigen subtilen Unterschieden.
null bedeutet „kein Objekt“, das heißt, dort sollte kein Wert vorhanden sein. Typische Verwendung ist:
(1) Als Parameter einer Funktion bedeutet dies, dass der Parameter der Funktion kein Objekt ist.
(2) Als Endpunkt der Objektprototypkette.
Object.getPrototypeOf(Object.prototype) // null
undefiniert bedeutet „fehlender Wert“, das heißt, hier sollte ein Wert vorhanden sein, dieser wurde jedoch noch nicht definiert. Typische Verwendung ist:
(1) Wenn eine Variable deklariert, aber kein Wert zugewiesen wird, ist sie gleich undefiniert.
(2) Beim Aufrufen der Funktion wird der bereitzustellende Parameter nicht angegeben und der Parameter ist gleich undefiniert.
(3) Dem Objekt sind keine Attribute zugewiesen und der Wert dieses Attributs ist undefiniert.
(4) Wenn die Funktion keinen Wert zurückgibt, gibt sie standardmäßig undefiniert zurück.
var i; i // undefined function f(x){console.log(x)} f() // undefined var o = new Object(); o.p // undefined var x = f(); x // undefined
Das Folgende ist eine kleine Zusammenfassung
null ist ein JavaScript-Schlüsselwort, das ein Nicht-Objekt darstellt.
undefiniert bedeutet, dass kein Wert vorhanden ist, was darauf hinweist, dass der Wert nicht existiert oder nicht initialisiert wurde.
Gleichheit | Unterschiede |
Einzigartiger Wert des eigenen Typs | null ist ein Objekt, undefiniert ist ein reserviertes Wort |
Keine Eigenschaften und Methoden | Null wird bei der Teilnahme an mathematischen Operationen in 0 konvertiert, und undefiniert kann bei mathematischen Operationen nicht in NaN konvertiert oder umgewandelt werden |
== gilt als gleich, === gilt als ungleich | null !==undefiniert //true |
sind alle falsche Werte und die booleschen Variablen stellen denselben Wert dar |
null ist ein leeres Objekt, undefiniert ist eine Eigenschaft von window (aber keine Objekteigenschaft) |
alert(typeof null) // object ; alarm(typeof undefiniert) // undefiniert ; |