Der deleteOperator wird verwendet, um Eigenschaften von Objekten zu entfernen.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Beachten Sie, dass dies für Arrays nicht mit dem Entfernen eines Elements identisch ist . Verwenden Sie Array#spliceoder, um ein Element aus einem Array zu entfernen Array#pop. Zum Beispiel:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
Einzelheiten
deletein JavaScript hat eine andere Funktion als das Schlüsselwort in C und C ++: Es gibt keinen direkten Speicher frei. Stattdessen besteht der einzige Zweck darin, Eigenschaften von Objekten zu entfernen.
Wenn Sie für Arrays eine Eigenschaft löschen, die einem Index entspricht, wird ein Array mit geringer Dichte erstellt (dh ein Array mit einem "Loch" darin). Die meisten Browser stellen diese fehlenden Array-Indizes als "leer" dar.
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Beachten Sie, dass deletenicht in verlagert array[3]wird array[2].
Verschiedene in JavaScript integrierte Funktionen behandeln spärliche Arrays unterschiedlich.
for...in überspringt den leeren Index vollständig.
Eine herkömmliche forSchleife gibt undefinedden Wert am Index zurück.
Jede verwendete Methode Symbol.iteratorgibt undefinedden Wert am Index zurück.
forEach, mapUnd reducewird einfach die fehlenden Index überspringen.
Daher sollte der deleteOperator nicht für den allgemeinen Anwendungsfall des Entfernens von Elementen aus einem Array verwendet werden. Arrays verfügen über spezielle Methoden zum Entfernen von Elementen und zum Neuzuweisen von Speicher: Array#splice()und Array#pop.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]])
Array#splicemutiert das Array und gibt alle entfernten Indizes zurück. deleteCountElemente werden aus dem Index entfernt start, und item1, item2... itemNwerden in das Array von Index eingefügt start. Wenn nicht deleteCountangegeben, werden Elemente aus startIndex bis zum Ende des Arrays entfernt.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Es gibt auch eine ähnlich benannte, aber unterschiedliche Funktion für Array.prototype: Array#slice.
Array # Slice ([Anfang [, Ende]])
Array#sliceist zerstörungsfrei und gibt ein neues Array zurück, das die angegebenen Indizes von startbis enthält end. Wenn endnicht angegeben, wird standardmäßig das Ende des Arrays verwendet. Wenn dies endpositiv ist, wird der auf Null basierende nicht inklusive Index angegeben, bei dem gestoppt werden soll. Wenn endes negativ ist, gibt es den Index an, bei dem angehalten werden soll, indem vom Ende des Arrays zurückgezählt wird (z. B. wird -1 den endgültigen Index weglassen). Wenn end <= start, ist das Ergebnis ein leeres Array.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Array # pop
Array#popEntfernt das letzte Element aus einem Array und gibt dieses Element zurück. Diese Operation ändert die Länge des Arrays.