Wie macht man eine Eigenschaft eines Objekts unveränderlich?
sobes.tech KI
Antwort von AI
Es gibt mehrere Möglichkeiten, eine Eigenschaft eines Objekts unveränderlich zu machen:
-
Verwendung von
Object.defineProperty():Diese Methode ermöglicht es, die Eigenschaften eines Objekts mit einer feineren Kontrolle zu definieren oder zu ändern. Um eine unveränderliche Eigenschaft zu erstellen, muss der Deskriptor der Eigenschaft mit
writable: falsegesetzt werden.const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'Unveränderlicher Wert', writable: false, // Macht die Eigenschaft unveränderlich enumerable: true, // Die Eigenschaft ist bei Iterationen sichtbar configurable: true // Die Eigenschaft kann gelöscht oder ihr Deskriptor geändert werden }); // Der Versuch, den Wert zu ändern, wird im Nicht-Strikt-Modus ignoriert // und löst im Strikt-Modus einen TypeError aus obj.myProperty = 'Neuer Wert'; console.log(obj.myProperty); // Gibt "Unveränderlicher Wert" ausWenn
configurable: falsegesetzt ist, kann die Eigenschaft nicht gelöscht oder ihr Deskriptor geändert werden (einschließlichwritable).const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'Unveränderlich und nicht leicht löschbar', writable: false, enumerable: true, configurable: false // Macht den Deskriptor unveränderlich }); // Versuch, den Wert zu ändern obj2.myProperty = 'Neuer Wert'; console.log(obj2.myProperty); // Gibt "Unveränderlich und nicht leicht löschbar" aus // Versuch, die Eigenschaft zu löschen delete obj2.myProperty; console.log(obj2.myProperty); // Gibt "Unveränderlich und nicht leicht löschbar" aus -
Verwendung von
Object.freeze():Diese Methode "friert" das Objekt ein. Das bedeutet, dass keine neuen Eigenschaften hinzugefügt, bestehende gelöscht, Werte geändert oder das Prototyp des Objekts modifiziert werden können.
const obj = { myProperty: 'Unveränderlicher Wert' }; Object.freeze(obj); // Versuch, den Wert zu ändern obj.myProperty = 'Neuer Wert'; console.log(obj.myProperty); // Gibt "Unveränderlicher Wert" aus // Versuch, eine neue Eigenschaft hinzuzufügen obj.newProperty = 'Neu'; console.log(obj.newProperty); // Gibt undefined aus // Versuch, die Eigenschaft zu löschen delete obj.myProperty; console.log(obj.myProperty); // Gibt "Unveränderlicher Wert" ausEs ist wichtig zu beachten, dass
Object.freeze()oberflächlich ist. Wenn eine Eigenschaft des Objekts ein anderes Objekt ist, wird dieses innere Objekt nicht eingefroren. -
Verwendung von
constfür Variablen, die Objekte enthalten:Das Schlüsselwort
constmacht die Referenz auf das Objekt unveränderlich, das Objekt selbst jedoch nicht. Sie können die Variable nicht neu zuweisen, aber die Eigenschaften des Objekts ändern.const obj = { myProperty: 'Anfangswert' }; // Der Wert der Eigenschaft kann geändert werden obj.myProperty = 'Neuer Wert'; console.log(obj.myProperty); // Gibt "Neuer Wert" aus // Die Variable kann nicht neu zugewiesen werden // obj = { andereEigenschaft: 'Andere' }; // Führt zu einem TypeError
Vergleich der Methoden:
| Methode | Was macht unveränderlich? | Ebene der Unveränderlichkeit |
|---|---|---|
Object.defineProperty() |
Eine bestimmte Eigenschaft | Durch den Deskriptor definiert |
Object.freeze() |
Das gesamte Objekt | Oberflächlich |
const |
Die Referenz auf das Objekt | Variable |
Die Wahl der Methode hängt davon ab, wie granular die Unveränderlichkeit sein soll. Für eine einzelne Eigenschaft eignet sich Object.defineProperty(), für das gesamte Objekt Object.freeze(). Um die Neu-Zuweisung der Referenz zu verhindern, wird const verwendet.