Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des Unterschieds zwischen null und undefinierter Verwendung in JavaScript

Detaillierte Erläuterung des Unterschieds zwischen null und undefinierter Verwendung in JavaScript

伊谢尔伦
伊谢尔伦Original
2017-07-18 14:07:141541Durchsuche

Beurteile undefiniert und null:

<span style="font-size: small;">var tmp = undefined; 
if (tmp== undefined) 
{ 
alert("null or undefined"); 
} </span>
<span style="font-size: small;">var tmp = undefined; 
if (tmp== null) 
{ 
alert("null or undefined"); 
}</span>

Erklärung: null==undefiniert

Aber:
null !== undefiniert
Also, was sind die beiden ? Was ist der Unterschied?
null
Dies ist ein Objekt, aber es ist leer. Da es sich um ein Objekt handelt, gibt typeof null „object“ zurück.
null ist ein für JavaScript reserviertes Schlüsselwort. Wenn
null an numerischen Operationen teilnimmt, wird sein Wert automatisch in 0 konvertiert. Daher erhält der folgende Ausdruck nach der Berechnung den korrekten Wert:
Ausdruck: 123 + null Ergebniswert: 123
Ausdruck: 123 * Null-Ergebniswert: 0
undefiniert
undefiniert ist eine spezielle Eigenschaft des globalen Objekts (Fensters) und sein Wert ist undefiniert. Aber typeof undefiniert gibt „undefiniert“ zurück.
Obwohl undefiniert eine besondere Bedeutung hat, ist es tatsächlich eine Eigenschaft und eine Eigenschaft des globalen Objekts (Fensters).

alert(&#39;undefined&#39; in window);//输出:true 
var anObj = {}; 
alert(&#39;undefined&#39; in anObj); //输出:false

Daraus ist ersichtlich, dass undefiniert ein Attribut des Fensterobjekts ist, aber kein Attribut des anObj-Objekts.
Hinweis: Obwohl undefiniert ein Attribut mit besonderer Bedeutung ist, ist es kein reserviertes Schlüsselwort in JavaScript.
Wenn undefiniert an einer numerischen Berechnung teilnimmt, muss das Ergebnis NaN sein.
NaN ist übrigens eine weitere besondere Eigenschaft des globalen Objekts (Fensters), ebenso wie Infinity. Keines dieser speziellen Attribute sind für JavaScript reservierte Schlüsselwörter!

Verbesserung der undefinierten Leistung
Wenn wir undefinierte Werte im Programm verwenden, verwenden wir tatsächlich die undefinierte Eigenschaft des Fensterobjekts.
Ähnlich, wenn wir eine Variable definieren, ihr aber keinen Anfangswert zuweisen, zum Beispiel:
var aValue; Wird als Vorkompilierungsreferenz bezeichnet.
Wenn wir also eine Variable oder einen Wert mit undefiniert vergleichen, wird sie tatsächlich mit der undefinierten Eigenschaft des Fensterobjekts verglichen. Während dieses Vergleichsprozesses sucht JavaScript nach der Eigenschaft „undefiniert“ des Fensterobjekts und vergleicht dann die Referenzzeiger der beiden Operanden, um festzustellen, ob sie gleich sind.
Da das Fensterobjekt viele Attributwerte hat, dauert es einige Zeit, bei jedem Vergleich mit undefiniert nach dem undefinierten Attribut des Fensterobjekts zu suchen. Dies kann ein Leistungsproblem bei Funktionen sein, die häufige Vergleiche mit undefiniert erfordern.

Beim Definieren einer undefinierten lokalen Variablen ist ihr Anfangswert beispielsweise ein Verweis auf den Eigenschaftswert window.undefined. Die neu definierte lokale undefinierte Variable existiert im Gültigkeitsbereich der Funktion. Bei nachfolgenden Vergleichsvorgängen ändert sich nichts an der Art und Weise, wie der JavaScript-Code geschrieben wird, aber die Vergleichsgeschwindigkeit ist sehr hoch. Da die Anzahl der Variablen im Bereich weitaus geringer ist als die Eigenschaften des Fensterobjekts, wird die Geschwindigkeit der Variablensuche erheblich verbessert.

Aus diesem Grund definieren viele Front-End-JS-Frameworks oft selbst eine lokale undefinierte Variable!

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen null und undefinierter Verwendung in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn