Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 114

4.13.4Der delete-Operator

Оглавление

delete ist ein unärer Operator, der versucht, die Objekteigenschaft oder das Array-Element zu löschen, das als sein Operand angegeben ist. Wie die Operatoren für Zuweisung, Inkrementierung und Dekrementierung wird delete üblicherweise wegen seines Seiteneffekts, Eigenschaften zu löschen, eingesetzt und nicht wegen des Werts, den er liefert. Ein paar Beispiele:

let o = { x: 1, y: 2}; // Beginnen wir mit einem Objekt.

delete o.x; // Eine seiner Eigenschaften löschen.

"x" in o // => false: Die Eigenschaft gibt es nicht mehr.

let a = [1,2,3]; // Ein Array definieren.

delete a[2]; // Das letzte Array-Element löschen.

2 in a // => false: Das Array-Element mit Index 2 existiert

// nicht mehr.

a.length // => 3: Beachten Sie, dass sich die Länge des Arrays

// nicht ändert.

Übrigens wird eine gelöschte Eigenschaft oder ein gelöschtes Array-Element nicht einfach auf undefined gesetzt. Wird eine Eigenschaft gelöscht, endet ihre Existenz. Ein Versuch, eine nicht (mehr) vorhandene Eigenschaft zu lesen, liefert undefined. Sie können aber auf die tatsächliche Existenz einer Eigenschaft mit dem in-Operator (siehe 4.9.3) prüfen. Löscht man ein Array-Element, entsteht eine »Lücke« im Array – die Länge des Arrays ändert sich dabei nicht. Das resultierende Array ist ein sogenanntes Sparse-Array (siehe 7.3).

delete erwartet, dass sein Operand ein Lvalue ist. Ist er kein Lvalue, unternimmt der Operator nichts und liefert true. Andernfalls versucht delete, das angegebene Lvalue zu löschen. delete gibt true zurück, wenn der Operator das Lvalue erfolgreich löschen konnte. Allerdings sind nicht alle Eigenschaften löschbar: Nicht konfigurierbare Eigenschaften (siehe 14.1) sind immun gegen Löschungen.

Im strict-Modus löst delete einen SyntaxError aus, wenn sein Operand ein nicht qualifizierter Identifier wie eine Variable, eine Funktion oder ein Funktionsparameter ist. Der Operator funktioniert also nur, wenn der Operand ein Eigenschaftszugriffsausdruck (siehe 4.4) ist. Der strict-Modus sorgt auch dafür, dass delete einen TypeError auslöst, wenn versucht wird, eine nicht konfigurierbare Eigenschaft zu löschen. Außerhalb des strict-Modus treten in diesen Fällen keine Ausnahmen auf. delete liefert einfach false, um anzuzeigen, dass der Operand nicht gelöscht werden konnte.

Hier sind einige Beispiele zur Verwendung des delete-Operators:

let o = {x: 1, y: 2};

delete o.x; // Eine der Eigenschaften des Objekts löschen; liefert true.

typeof o.x; // Die Eigenschaft gibt es nicht; liefert "undefined".

delete o.x; // Eine nicht vorhandene Eigenschaft löschen; liefert true.

delete 1; // Das ergibt zwar keinen Sinn, aber es liefert als Ergebnis true.

// Eine Variable kann nicht gelöscht werden; gibt false oder – im strict-Modus –

// einen SyntaxError zurück:

delete o;

// Nicht löschbare Eigenschaft; gibt false oder – im strict-Modus – einen

// TypeError zurück:

delete Object.prototype;

Der delete-Operator wird uns noch einmal in 6.4 begegnen.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх