Heim > Artikel > Web-Frontend > Der Unterschied und die Verwendung von undefiniert und null, die leeren Raum in JavaScript darstellen
Als ich anfing, JavaScript zu lernen
hatte ich das Gefühl, dass undefiniert ziemlich neu war
weil andere Sprachen es nicht hatten
und es nicht nur undefiniert hatte, sondern Es gab auch eine Null, was „leer“ bedeutet
Ich glaube, viele Schüler können den Unterschied zwischen undefiniert und null nicht erkennen
Heute werde ich den Unterschied zwischen undefiniert und null zusammenfassen, was in JavaScript „leer“ bedeutet
Undefiniert und null sind beide JavaScript-Grundtypen in
und sie haben jeweils nur einen Typwert, der undefiniert und null ist und denselben Namen wie ihre Typen hat
Normalerweise gibt es wirklich keinen Differenz zwischen diesen beiden Werten
var foo = undefined;
var foo = null;
Und die Norm schreibt auch vor, dass
console.log(null == undefined) // true
(aber null !== undefined
)
in a umgerechnet wird Boolescher Wert und ist falsch
if(!undefined){ console.log(1);//1}if(!null){ console.log(1);//1}
Aber tatsächlich gibt es einen Unterschied
Schauen wir uns zuerst diese Codezeilen an
console.log(undefined in window);// trueconsole.log(null in window);// false
Das ist der Unterschied
null ist ein Schlüsselwort in JavaScript
undefiniert ist eine spezielle Eigenschaft für Fenster (das gleiche wie NaN und Infinity)
Obwohl ES5 undefiniert zu einer schreibgeschützten Eigenschaft wird, gibt es immer noch einige unvernünftige Dinge , wie zum Beispiel dieses
function fn(){ var undefined = 1;// 注意:前方高能 console.log(undefined);// 1} fn();
Sehen Sie, da undefiniert kein Schlüsselwort ist, können wir undefiniert in lokalen Variablen deklarieren (sprachlos)
Auch wenn Sie sich im strengen Modus befinden
function fn(){ "use strict"; var undefined = 1; console.log(undefined);// 1} fn();
Wir dürfen keinen solch unverschämten Code schreiben
Es gibt auch einen Unterschied bei der Durchführung mathematischer Operationen
console.log(undefined + 1); //NaNconsole.log(null + 1); //1
undefiniert für jede Operation wird in NaN konvertiert
, während Null in 0 konvertiert wird
Es macht Sinn, dass JavaScript zwei Werte hat, die null darstellen
Brendan Eich, der Vater von js, hat es ursprünglich wie Java entworfen, nur mit null
Aber Er war der Ansicht, dass js zwei Arten von Grundwerten und Referenzwerten hat
Die Verwendung eines Objekts zur Darstellung des Seltsamen typeof null === 'object'
und die Umwandlung von Null in die Zahl 0 führten dazu, dass viele Fehler schwer zu finden waren
Also entwarf er undefiniert
Laut js Das Design des Vaters
undefiniert bedeutet fehlender Wert
null bedeutet ein leeres Objekt
Aber wir verwenden es jetzt nicht so
Es kann so verstanden werden
undefiniert bedeutet, dass die Variable nicht initialisiert ist, nein. Der Wert
null bedeutet, dass die Variable initialisiert wurde und der Wert „Nullwert“ ist
undefiniert wird von js verwendet und null ist für uns
Ich weiß nicht, ob Sie diesen Satz verstehen können
Wenn Sie beispielsweise in diesen Fällen eine Variable deklarieren
var a;
, die Engine weist ihr während der Vorkompilierung den Standardwert undefiniert zu
function a(){}
Deklarationsfunktion, kein Rückgabewert, Standard gibt undefiniert zurück
var obj = {};obj.a;
Beim Zugriff auf nicht vorhandene Objekteigenschaften ist der Standardwert undefiniert
var a = function(a){};a();
nicht angegeben Tatsächliche Parameter, Standardparameterwert undefiniert
......
Dies ist die vom System vorgegebene Standardeinstellung, die von js verwendet wird >Und Was wir verwenden möchten, ist null
Zum Beispiel:
Erstellen Sie ein leeres Objekt var obj = Object.create(null);
Unbind event demo.onclick = null;