Der lösche Bediener wird in JavaScript nicht sehr häufig verwendet, aber seine Eigenschaften sind in der Tat sehr seltsam.
1. Löschen Sie die Eigenschaften des Objekts, Code:
Die Codekopie lautet wie folgt:
var o = {
A: 1,
B: 2
};
OA löschen;
Alarm (OA); //undefiniert
Wird also das Attribut des Objekts oder des Attributwerts des Objekts gelöscht? Ich begann zu glauben, dass der Löschen der Wert sein sollte, da das Ergebnis undefiniert ist und kein Fehler besteht. Aber in der Tat ist meine Meinung falsch, geben Sie ein Beispiel:
Die Codekopie lautet wie folgt:
var o = {};
var a = {
Pro: "Zhenn"
};
oc = a;
OC löschen; // die Eigenschaft a des Objekts o löschen o
console.log (oc); // undefiniert
console.log (A.Pro); // Zhenn
Durch den obigen Code ist es nicht schwierig zu erkennen, dass nach dem Löschen von OC der Wert, auf den OC nicht gelöscht wird, dh Objekt, das A noch existiert, sonst sollte A.Pro nicht in der Lage sein, die Kompilierungsstufe zu übergeben. Apropos ist zu verstehen, dass es auf diese Weise löscht, die Attribute eines Objekts zu löschen, was tatsächlich dem Löschen einer Referenz auf den Attributwert im Objekt entspricht, aber dieser Wert befindet sich noch im Objektstapel!
2. Sehen Sie sich zuerst den Code für den Betrieb des Arrays an:
Die Codekopie lautet wie folgt:
var arr = [1,2,3];
arr [2] löschen;
console.log (arr.length); // 3
console.log (arr); // [1,2, undefiniert]
Es wurde erneut bewiesen, dass Delete das Element nicht wirklich löscht, sondern nur den dem Element entsprechenden Schlüsselwert löscht. Um die Essenz des Löschens weiter zu verstehen, vergleichen Sie sie mit der POP -Methode in Array. wie folgt:
Die Codekopie lautet wie folgt:
var arr = [1,2,3];
arr.pop ();
console.log (arr); // [1,2]
console.log (arr.length) // 2
Die Wahrheit sollte jetzt offenbart werden.
3. Die obigen Operationen für Objekte und Arrays sind leicht zu verstehen, aber die Operationen auf Variablen sind zwangsläufig schwer zu verstehen. Der Code ist wie folgt:
Die Codekopie lautet wie folgt:
var a = 1;
a löschen;
Alarm (a); // 1
Funktion fn () {return 42; }
fn löschen;
Alarm (fn ()); // 42
B = 2;
b;
Alarm (b); // B ist nicht definiert;
Es ist schwer zu erklären. Es ist auch eine globale Variable, aber die mit VAR deklarierte Variable B kann nicht gelöscht werden. Es ist unmöglich zu sagen, dass Löschen sehr seltsam ist. In der durch ECMA gegebenen Erläuterung bedeutet dies nur, dass Variablen, die durch die Funktion deklariert wurden, die Dontdelete -Funktion haben und nicht gelöscht werden können.