Der Begriff, den Sie im Titel Ihrer Frage verwendet haben, Entfernen einer Eigenschaft aus einem JavaScript-Objekt kann auf verschiedene Weise interpretiert werden. Die eine ist, es für den gesamten Speicher und die Liste der Objektschlüssel zu entfernen oder die andere ist, es einfach aus Ihrem Objekt zu entfernen. Wie bereits in einigen anderen Antworten erwähnt wurde, ist die delete
Das Schlüsselwort ist der wichtigste Teil. Nehmen wir an, Sie haben Ihr Objekt wie:
myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
Wenn Sie das tun:
console.log(Object.keys(myJSONObject));
wäre das Ergebnis:
["ircEvent", "method", "regex"]
Sie können diesen speziellen Schlüssel aus Ihren Objektschlüsseln löschen:
delete myJSONObject["regex"];
Dann werden Ihre Objekte mit dem Schlüssel Object.keys(myJSONObject)
wäre:
["ircEvent", "method"]
Aber der Punkt ist, wenn Sie sich um den Speicher kümmern und Sie wollen, dass das Objekt ganz aus dem Speicher entfernt wird, ist es empfehlenswert, es auf null zu setzen, bevor Sie den Schlüssel löschen:
myJSONObject["regex"] = null;
delete myJSONObject["regex"];
Ein weiterer wichtiger Punkt ist, dass Sie auf Ihre anderen Verweise auf dasselbe Objekt achten müssen. Wenn Sie zum Beispiel eine Variable wie:
var regex = myJSONObject["regex"];
Oder fügen Sie ihn als neuen Zeiger auf ein anderes Objekt hinzu:
var myOtherObject = {};
myOtherObject["regex"] = myJSONObject["regex"];
Auch wenn Sie es aus Ihrem Objekt entfernen myJSONObject
wird dieses spezifische Objekt nicht aus dem Speicher gelöscht, da die regex
variabel und myOtherObject["regex"]
haben immer noch ihre Werte. Wie könnten wir dann das Objekt sicher aus dem Speicher entfernen?
Die Antwort würde lauten alle Verweise in Ihrem Code löschen, die auf dieses Objekt verweisen und auch nicht verwenden var
Anweisungen, um neue Verweise auf dieses Objekt zu erstellen . Dieser letzte Punkt bezüglich var
ist eine der wichtigsten Fragen, mit denen wir normalerweise konfrontiert werden, denn die Verwendung von var
Anweisungen würden verhindern, dass das erstellte Objekt entfernt wird.
Das bedeutet, dass Sie in diesem Fall nicht in der Lage sein werden, das Objekt zu entfernen, da Sie die regex
Variable über eine var
Aussage, und wenn Sie das tun:
delete regex; //False
Das Ergebnis wäre false
, was bedeutet, dass Ihre Löschanweisung nicht wie erwartet ausgeführt wurde. Hätten Sie diese Variable jedoch vorher nicht erstellt und nur myOtherObject["regex"]
als letzten bestehenden Verweis zu verwenden, hätten Sie dies auch einfach durch Entfernen des Verweises tun können:
myOtherObject["regex"] = null;
delete myOtherObject["regex"];
Mit anderen Worten: Ein JavaScript-Objekt wird gelöscht, sobald in Ihrem Code kein Verweis mehr auf dieses Objekt vorhanden ist.
Aktualisierung:
Dank an @AgentME:
Das Setzen einer Eigenschaft auf Null vor dem Löschen bewirkt nicht, dass nichts (es sei denn, das Objekt wurde mit Object.seal versiegelt und das Löschen fehlschlägt. Das ist normalerweise nicht der Fall, es sei denn, man versucht es ausdrücklich versuchen).
Für weitere Informationen über Object.seal
: Object.seal()
0 Stimmen
Delete myObject.regex; // oder, delete myObject['regex']; // oder, var prop = "regex"; delete myObject[prop];