Was ein bisschen seltsam ist, ist, dass die JavaScript -Sprache tatsächlich zwei Werte enthält, die "nicht" darstellen: und undefiniert und Null. Warum ist das so?
1. Ähnlichkeit
In JavaScript, die eine Variable zu undefinierter oder Null zuweist, ehrlich gesagt fast kein Unterschied.
Die Codekopie lautet wie folgt:
var a = undefiniert;
var a = null;
Im obigen Code wird die A -Variable undefined bzw. NULL zugewiesen, und diese beiden Schreibmethoden sind nahezu äquivalent.
Undefiniert und Null werden in der IF -Anweisung automatisch in False konvertiert, und der Gleichstellungsbetreiber berichtet sogar direkt, dass die beiden gleich sind.
Die Codekopie lautet wie folgt:
if (! undefiniert)
console.log ('undefiniert ist falsch');
// undefiniert ist falsch
if (! null)
console.log ('null ist falsch');
// null ist falsch
undefiniert == NULL
// WAHR
Der obige Code zeigt, wie ähnlich das Verhalten der beiden ist!
Warum müssen Sie zwei solche Werte gleichzeitig festlegen, da die Bedeutung und Nutzung von undefiniertem und Null ähnlich sind? Dart, eine JavaScript -Alternative zu Google, sieht eindeutig vor, dass es nur Null und keine undefinierten gibt!
2. Historische Gründe
Kürzlich, als ich das neue Buch "Speaking JavaScript" las, entdeckte ich versehentlich die Antwort auf diese Frage!
Es stellt sich heraus, dass dies mit der Geschichte von JavaScript zusammenhängt. Als JavaScript 1995 geboren wurde, wurde es ursprünglich wie Java eingestellt, nur Null wurde als Wert festgelegt, der "keine" angab.
Nach der Tradition der C -Sprache soll Null automatisch auf 0 wechseln.
Die Codekopie lautet wie folgt:
Nummer (null)
// 0
5 + null
// 5
JavaScript -Designer Brendan Eich glaubt jedoch, dass dies aus zwei Gründen nicht ausreicht.
Erstens wird Null als Objekt wie in Java behandelt.
Die Codekopie lautet wie folgt:
typeof null
// "Objekt"
Die Datentypen von JavaScript sind jedoch in zwei Kategorien unterteilt: primitive und synthetische Typen (komplex).
Zweitens enthielt die anfängliche Version von JavaScript keinen Fehlerbehandlungsmechanismus. Brendan Eich glaubt, dass es nicht einfach ist, Fehler zu finden, wenn NULL automatisch auf 0 wird.
Daher entwarf Brendan Eich eine andere undefinierte.
3.. Erstes Design
Die ursprüngliche Version von JavaScript hat sie so ausgewiesen: NULL ist ein Objekt, das "keine" darstellt, die 0 ist, wenn sie in einen numerischen Wert konvertiert wird. .
Die Codekopie lautet wie folgt:
Nummer (undefiniert)
// nan
5 + undefiniert
// nan
4. Aktuelle Verwendung
Die oben genannte Unterscheidung wurde jedoch in der Praxis schnell als unmittelbar erwiesen. Gegenwärtig sind Null und Undefined im Grunde genommen gleichbedeutend mit nur geringen Unterschieden.
Null bedeutet "kein Objekt", das heißt, es sollte dort keinen Wert geben. Typische Verwendung ist:
(1) Als Parameter einer Funktion ist der Parameter der Funktion kein Objekt.
(2) als Endpunkt der Objektprototypkette.
Die Codekopie lautet wie folgt:
Object.getPrototypeof (Object.Prototype)
// null
Undefiniert bedeutet "fehlender Wert", was bedeutet, dass es hier einen Wert geben sollte, aber es wurde noch nicht definiert. Typische Verwendung ist:
(1) Wenn eine Variable deklariert wird, aber keine Zuordnung hat, entspricht sie undefiniert.
(2) Beim Aufrufen der Funktion wird der Parameter, der bereitgestellt werden sollte, nicht bereitgestellt und der Parameter ist gleich und definiert.
(3) Das Objekt hat kein Attribut, das dem Wert zugewiesen ist, und der Wert des Attributs ist undefiniert.
(4) Wenn die Funktion keinen Wert zurückgibt, wird undefiniert standardmäßig zurückgegeben.
Die Codekopie lautet wie folgt:
var i;
i // undefiniert
Funktion f (x) {console.log (x)}
f () // undefiniert
var o = neues Objekt ();
op // undefiniert
var x = f ();
x // undefiniert