Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Einführung in den Löschoperator in Javascript_Grundkenntnisse

Detaillierte Einführung in den Löschoperator in Javascript_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:46:011116Durchsuche

1. Variablen

Wenn wir über den Löschoperator in JavaScript sprechen, müssen wir zunächst die Beziehung zwischen Variablen und Attributen in JavaScript verstehen.

In JavaScript ist die Beziehung zwischen Variablen und Objekteigenschaften sehr subtil und kann in vielen Fällen sogar gleichgesetzt werden, da JavaScript vor der Ausführung des Skripts ein globales Objekt erstellt, bei dem es sich um das Fensterobjekt im Browser handelt Globale Variablen sind Attribute des globalen Objekts. Bei der Ausführung einer Funktion wird auch ein Aktivierungsobjekt erstellt. Alle lokalen Variablen sind Attribute dieses Aktivierungsobjekts. Sie können mehr über diese Javascript-Bereiche und -Abschlüsse erfahren.

Code kopieren Der Code lautet wie folgt:

//Im Prototyp deklarierte Attribute können nicht sein gelöscht

var global = 1;
this.global; // 1, auf das globale Objekt kann über this zugegriffen werden
this.global2 = 2;
global2; // 12
function foo( ) {
var local = 36;
// Auf die Aktivierung kann jedoch nicht direkt zugegriffen werden,
// Daher kann auf lokale Variablen nicht über foo.local
}
zugegriffen werden

Es scheint, dass Variablen Objekteigenschaften entsprechen, aber das ist nicht der Fall, zumindest nicht für den Löschoperator. Nach meinem Verständnis muss die Variablendeklaration über die var-Anweisung abgeschlossen werden. Globale Variablen, die nicht über die var-Anweisung deklariert werden, sind alle Attribute des Fensterobjekts. Dies erleichtert das Verständnis der Beziehung zwischen Variablen und Objekteigenschaften.

2. Löschoperator

Der Löschoperator wird zum Löschen von Objektattributen verwendet. Bei Referenztypwerten löscht es auch das Objektattribut selbst und nicht das Objekt, auf das das Attribut verweist. Wenn Sie Fragen haben, können Sie sich die Werte von Basistypen und Referenztypen ansehen oder den folgenden Code testen:

Kopieren Sie den Code Der Code lautet wie folgt:

var o = {};
var a = { x: 10 };
o.a = a;
delete o.a; // Das o.a-Attribut wird gelöscht
console.log(o.a); // undefiniert
console.log(a.x); weil das { x: 10 }-Objekt immer noch von a referenziert wird nicht recycelt werden

Darüber hinaus kann delete o.x auch als delete o["x"] geschrieben werden, was beides den gleichen Effekt hat.

3. Variablen können nicht gelöscht werden

Variablen, die über var deklariert wurden, und Funktionen, die über function deklariert wurden, haben das dontdelete-Attribut und können nicht gelöscht werden. Globale Variablen, die nicht über var (Attribute globaler Objekte) deklariert wurden

Code kopieren Der Code lautet wie folgt:

var global = {
a: 123,
b: {
c: 1345
}
};
delete global; //Ungültig
console.log (global )

obj = {
a: 123
};
delete obj; // Löschen Sie die globale Variable obj, das obj-Attribut des Fensterobjekts
console.log (obj);/ /obj ist nicht definiert

4. Die im Prototyp deklarierten Attribute und die Attribute des Objekts können nicht gelöscht werden

Die im Prototyp-Prototyp deklarierten Attribute und die mit dem Objekt gelieferten Attribute (tatsächlich sind diese Attribute auch im Prototyp-Prototyp enthalten) können als mit der Dontdelete-Funktion versehen betrachtet werden und können nicht gelöscht werden. Beispiel:

Code kopieren Der Code lautet wie folgt:

//Attribute deklariert in Prototyp kann nicht gelöscht werden

function obj() {
this.x = 1;
}
obj.prototype.x = 2;

var o = new obj ();
console.log(o.x); // 1, o.x im Konstruktor definiert

delete o.x;
console.log(o.x); // 2, o.x im Prototyp definiert , auch wenn delete o.x erneut ausgeführt wird, wird es auch nicht gelöscht

//Die Eigenschaften des Objekts können nicht gelöscht werden

var strings = "123456";
console.log(strings. length);// 6
delete strings.length;
console.log(strings.length);//immer noch 6

5. Mehrere Ausnahmen im Rahmen der Bewertungserklärung

Im von

eval ausgeführten Code gehören mit var deklarierte Variablen zwar zum selben globalen Objekt wie normale var-deklarierte Variablen, verfügen jedoch nicht über die Dontdelete-Funktion und können gelöscht werden. Variablen, die über var innerhalb der Funktion im Eval-Code definiert werden, verfügen jedoch über dontdelete und können nicht gelöscht werden.

Code kopieren Der Code lautet wie folgt:
eval("var x = 42;");
x; // => 42
delete x;
x; // => eval("function f() { return 12; }");
f();
delete f;
f(); // => nicht definiert
//Obwohl die von var deklarierten Variablen im von eval ausgeführten Code zum gleichen globalen Objekt gehören wie die normalen var-deklarierten Variablen,
// verfügen sie nicht über die Dontdelete-Funktion und können gelöscht werden.
eval("(function () {"
" var x = 42;"
" delete x;"
" return x;"
"})();")
// => 42
// Die durch var innerhalb der Funktion im Auswertungscode definierten Variablen sind nicht gelöscht und können nicht gelöscht werden.

6. Rückgabewert von delete

delete ist ein normaler Operator und gibt true oder false zurück. Gibt „false“ zurück, wenn die Eigenschaft des gelöschten Objekts vorhanden ist und „dontdelete“ hat, andernfalls wird „true“ zurückgegeben. Ein Merkmal hierbei ist, dass „true“ auch dann zurückgegeben wird, wenn das Objektattribut nicht vorhanden ist, sodass der Rückgabewert nicht vollständig mit der Frage übereinstimmt, ob der Löschvorgang erfolgreich war oder nicht.


Code kopieren Der Code lautet wie folgt:
Funktion c() {
this .x = 42;
}
c.prototype.y = 12;
var o = new c();

delete o.x; // true
o.x; undefiniert
"x" in o; // false
// o.x existiert und es gibt kein dontdelete, return true

delete o.y; // true
o.y; >// o selbst Es gibt kein o.y-Attribut, also gib true zurück
// Von hier aus können Sie auch die Existenz der Prototypenkette sehen. Die eigenen Attribute des Objekts und die Prototypattribute sind unterschiedlich

lösche o ; // false
// global .o hat das dontdelete-Attribut, also gibt es false zurück

delete undefinedproperty; // true
// global hat keine Eigenschaft namens undefinedproperty, also gibt es true zurück

delete 42; // true
// 42 ist kein Attribut und gibt daher true zurück. Einige Implementierungen lösen Ausnahmen aus (die gegen Ecmascript-Standards verstoßen)

var x = 24;
delete x; // true
x; // x wird gelöscht Der Rückgabewert ( 24) ist kein Attribut und gibt daher true zurück

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