delete
löscht die Objekteigenschaft, indiziert das Array aber nicht neu und aktualisiert auch nicht dessen Länge. Dies lässt es so erscheinen, als ob es undefiniert wäre:
> myArray = ['a', 'b', 'c', 'd']
["a", "b", "c", "d"]
> delete myArray[0]
true
> myArray[0]
undefined
Beachten Sie, dass der Wert nicht auf den Wert undefined
sondern die Eigenschaft wird aus dem Array entfernt, wodurch sie erscheinen undefiniert. Die Chrome-Entwicklungstools machen diesen Unterschied deutlich, indem sie Folgendes ausgeben empty
bei der Protokollierung des Arrays.
> myArray[0]
undefined
> myArray
[empty, "b", "c", "d"]
myArray.splice(start, deleteCount)
entfernt das Element tatsächlich, indiziert das Array neu und ändert seine Länge.
> myArray = ['a', 'b', 'c', 'd']
["a", "b", "c", "d"]
> myArray.splice(0, 2)
["a", "b"]
> myArray
["c", "d"]
4 Stimmen
Para
.splice
in Schleifen, werfen Sie einen Blick auf diese Frage: Löschen aus Array in Javascript .6 Stimmen
@andynormancx Ja, aber diese Antwort wurde erst einen Tag später gepostet und erhielt so viele Stimmen - ich würde sagen, sie ist besser geschrieben, das muss es sein.
0 Stimmen
@andynormancx - Es scheint kein exaktes Duplikat zu sein. Die Frage, die Sie verlinkt haben, fragt im Grunde, warum das Löschen eines Elements aus einem Array (wodurch es spärlich wird) dessen Länge nicht verringert. Diese Frage fragt nach den Unterschieden zwischen
delete
yArray.prototype.splice
.0 Stimmen
@chharvey stimmt zu, aber was noch wichtiger ist, wie kann diese Frage vor 9 Jahren gestellt worden sein! Ich komme mir alt vor, wenn ich hier wieder einen Kommentar abgebe.
0 Stimmen
JavaScript: die ersten 20 Jahre erwähnt "JavaScript 1.1 fügt die delete-, typeof- und void-Operatoren hinzu. In JavaScript 1.1 setzt der delete-Operator seinen Variablen- oder Objekt-Eigenschafts-Operanden einfach auf den Wert null. "& splice wurde in 1.2 hinzugefügt "Die Array-Funktionen push, pop, shift, unshift und splice wurden direkt den gleichnamigen Perl-Array-Funktionen nachempfunden."