Das JavaScript -Sprachdesign ist nicht streng genug, und viele Orte werden Fehler machen, wenn Sie nicht vorsichtig sind.
Betrachten Sie beispielsweise die folgenden Situationen.
Jetzt müssen wir feststellen, ob ein globales Objekt myobj existiert und ob es nicht existiert, es erklären. Der in der natürlichen Sprache beschriebene Algorithmus lautet wie folgt:
if (myobj existiert nicht) {deklary myobj; }Möglicherweise finden Sie es einfach, diesen Code zu schreiben. Tatsächlich sind die grammatikalischen Probleme jedoch weitaus komplizierter als wir denken. Juriy Zaytsev wies darauf hin, dass es mehr als 50 Möglichkeiten gibt, um festzustellen, ob ein JavaScript -Objekt existiert. Nur wenn die Implementierungsdetails der JavaScript -Sprache sehr klar sind, können sie unterschieden werden.
Der erste Weg zum Schreiben
Basierend auf Ihrer Intuition denken Sie vielleicht, dass Sie Folgendes schreiben können:
if (! myobj) {myobj = {}; }Wenn Sie diesen Code jedoch ausführen, wirft der Browser einen ReferenzError -Fehler direkt aus, wodurch die Operation unterbrochen wird. Was ist los?
Wenn die IF -Anweisung bestimmt, ob MyOBJ leer ist, gibt es übrigens noch nicht, dass diese Variable noch nicht vorhanden ist, sodass ein Fehler gemeldet wird. Ändern Sie es in Folgendes und es läuft korrekt.
if (! myobj) {var myobj = {}; }Warum wird der Fehler nicht nach dem Hinzufügen eines VAR gemeldet? Gibt es in diesem Fall bereits, wenn die IF -Erklärung Urteile fällt?
Um diese Frage zu beantworten, müssen Sie wissen, wie der JavaScript -Dolmetscher funktioniert. Die JavaScript -Sprache ist "zuerst analysieren, später ausgeführt". Die Variablenerklärung wird während der Parsen abgeschlossen, sodass der obige Code tatsächlich entspricht:
var myobj; if (! myobj) {var myobj = {}; }Wenn die IF -Aussage Urteile fällt, existiert MyObj, so dass es keinen Fehler gibt. Dies ist der "Code -Verbesserung" -Effekt des VAR -Befehls. Der JavaScript -Interpreter "erhöht" nur durch den Befehl var definierte Variablen und funktioniert nicht für Variablen, die den Befehl var nicht verwenden und direkt zuweisen. Aus diesem Grund wird ein Fehler verursacht, wenn Sie VAR nicht hinzufügen.
Der zweite Weg zum Schreiben
Zusätzlich zum Befehl var kann es ein weiteres Umschreiben geben, und Sie können auch das richtige Ergebnis erzielen:
if (! window.myobj) {myobj = {}; }Das Fenster ist das oberste Objekt von JavaScript, und alle globalen Variablen sind seine Eigenschaften. Daher ist zu urteilen, ob MyOBJ leer ist, gleichbedeutend mit der Beurteilung, ob das Fensterobjekt MYOBJ -Attribut hat, um den ReferenzErrorfehler zu vermeiden, da MyOBJ nicht definiert ist. Aus der Standardisierung des Codes ist es jedoch am besten, VAR zur zweiten Zeile hinzuzufügen:
if (! window.myobj) {var myobj = {}; }Oder schreiben Sie es so:
if (! window.myobj) {window.myobj = {}; }Der dritte Weg zum Schreiben
Der Nachteil der obigen Schreibmethode besteht darin, dass in einigen Betriebsumgebungen (wie V8 und Rhino) das Fenster möglicherweise kein Objekt der obersten Ebene ist. Erwägen Sie also, es neu zu schreiben wie:
if (! this.myobj) {this.myobj = {}; }Auf globaler variabler Ebene weist dieses Schlüsselwort immer auf die Variable der obersten Ebene hin, sodass es unabhängig von verschiedenen Betriebsumgebungen sein kann.
Der vierte Weg zum Schreiben
Das obige Schreiben ist jedoch schlecht lesbar, und das Hinweis darauf ist variabel und fehleranfällig, so dass es weiter umgeschrieben wird:
var global = this; if (! global.myobj) {global.myobj = {}; }Es ist viel klarer, die benutzerdefinierte Variable Global zu verwenden, um das Objekt der obersten Ebene darzustellen.
Der fünfte Weg zum Schreiben
Sie können auch den Typeof -Operator verwenden, um festzustellen, ob MyOBJ definiert ist.
if (typeof myobj == "undefined") {var myobj = {}; }Dies ist die am weitesten verbreitete Methode, um zu bestimmen, ob ein JavaScript -Objekt existiert.
Der sechste Weg zum Schreiben
Da der Wert von MyOBJ bei definierten, aber nicht zugewiesenen Fall direkt und definiert ist, kann die obige Schreibmethode vereinfacht werden:
if (myobj == undefiniert) {var myObj = {}; }Hier gibt es zwei Orte zu beachten. Zunächst dürfen die VAR -Schlüsselwörter in der zweiten Zeile nicht fehlen, andernfalls tritt ein ReferenzErrorfehler auf. Zweitens kann undefiniert nicht mit einzelnen oder doppelten Zitaten hinzugefügt werden, da der Datentyp von undefiniert hier nicht mit der Zeichenfolge "undefiniert" verglichen wird.
Der siebte Weg zum Schreiben
Die obige Schreibmethode ist unter der Bedingung von "genauem Vergleich" (===) weiterhin gültig:
if (myobj === undefined) {var myobj = {}; }Der achte Weg zum Schreiben
Nach dem Sprachdesign von JavaScript undefined == NULL können Sie auch das richtige Ergebnis erzielen, indem Sie vergleichen, ob myobj gleich Null ist:
if (myobj == null) {var myobj = {}; }Obwohl das Betriebsergebnis korrekt ist, ist diese Urteilsmethode falsch und sollte vermieden werden. Da sich Null auf ein leeres Objekt bezieht, das Null zugewiesen wurde, wird dieses Objekt tatsächlich geschätzt, während undefined auf ein Objekt, das nicht existiert oder keine Zuordnung hat. Daher können Sie hier nur den "Operator" (==) verwenden, und wenn Sie hier den "exakten Vergleichsoperator" (===) verwenden, erhalten Sie einen Fehler.
Der neunte Weg zum Schreiben
Sie können auch den In-Operator verwenden, um festzustellen, ob MyOBJ ein Attribut des obersten Objekts ist:
if (! ('myobj' im Fenster)) {window.myobj = {}; }Der zehnte Weg zum Schreiben
Verwenden Sie schließlich die Methode für HasownProperty, um festzustellen, ob MyOBJ eine Eigenschaft des Objekts der obersten Ebene ist:
if (! this.hasownProperty ('myobj')) {this.myObj = {}; }Zusammenfassen
1. Wenn Sie nur feststellen, ob das Objekt existiert, wird empfohlen, die fünfte Schreibmethode zu verwenden.
2. Wenn zusätzlich ob das Objekt existiert, muss auch festgestellt werden, ob das Objekt einen Nullwert hat, empfohlen, die erste Schreibmethode zu verwenden.
3. Sofern nicht anders angegeben, sollten alle Variablen mit dem Befehl var deklariert werden.
4. Für plattformübergreifende Plattform wird empfohlen, die Verwendung von Fenstern zur Darstellung von Objekten auf oberster Ebene zu vermeiden.
5. In der JavaScript -Sprache sind Null und Undefined zu Verwirrung. In Fällen, in denen beide involviert sein können, wird empfohlen, den Operator "Genauer Vergleich" (===) zu verwenden.
(über)
Das obige einfache Beispiel dafür, wie ein JavaScript -Objekt existiert, ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.