Zusammenfassung:
const
und Object.freeze()
dienen ganz anderen Zwecken.
const
dient zum Deklarieren einer Variablen, die sofort zugewiesen werden muss und nicht neu zugewiesen werden kann. Variablen, die von deklariert wurden, const
haben einen Blockbereich und funktionieren nicht wie Variablen, die mit deklariert wurdenvar
Object.freeze()
ist eine Methode, die ein Objekt akzeptiert und dasselbe Objekt zurückgibt. Jetzt kann das Objekt keine seiner Eigenschaften entfernen oder neue Eigenschaften hinzufügen.
Beispiele const
:
Beispiel 1: Kann nicht neu zugewiesen werden const
Der folgende Code löst einen Fehler aus, da wir versuchen, die Variable foo, die mit dem const
Schlüsselwort deklariert wurde, neu zuzuweisen. Wir können sie nicht neu zuweisen.
Beispiel 2: Zugeordnete Datenstrukturen const
können mutiert werden
const object = {
prop1: 1,
prop2: 2
}
object.prop1 = 5; // object is still mutable!
object.prop3 = 3; // object is still mutable!
console.log(object); // object is mutated
In diesem Beispiel deklarieren wir eine Variable mit dem const
Schlüsselwort und weisen ihr ein Objekt zu. Obwohl wir dieser Variablen namens object nicht neu zuweisen können, können wir das Objekt selbst mutieren. Wenn wir vorhandene Eigenschaften ändern oder neue Eigenschaften hinzufügen, hat dies Auswirkungen. Um Änderungen am Objekt zu deaktivieren, benötigen wir Object.freeze()
.
Beispiele Object.freeze()
:
Beispiel 1: Ein eingefrorenes Objekt kann nicht mutiert werden
object1 = {
prop1: 1,
prop2: 2
}
object2 = Object.freeze(object1);
console.log(object1 === object2); // both objects are refer to the same instance
object2.prop3 = 3; // no new property can be added, won't work
delete object2.prop1; // no property can be deleted, won't work
console.log(object2); // object unchanged
In diesem Beispiel Object.freeze()
gibt object1
die Funktion beim Aufrufen und Angeben als Argument das Objekt zurück, das jetzt 'eingefroren' ist. Wenn wir die Referenz des neuen Objekts mit dem ===
Operator mit dem alten Objekt vergleichen, können wir feststellen, dass sie sich auf dasselbe Objekt beziehen. Auch wenn wir versuchen, Eigenschaften hinzuzufügen oder zu entfernen, können wir feststellen, dass dies keine Auswirkungen hat (wird im strengen Modus einen Fehler auslösen).
Beispiel 2: Objekte mit Referenzen werden nicht vollständig eingefroren
const object = {
prop1: 1,
nestedObj: {
nestedProp1: 1,
nestedProp2: 2,
}
}
const frozen = Object.freeze(object);
frozen.prop1 = 5; // won't have any effect
frozen.nestedObj.nestedProp1 = 5; //will update because the nestedObject isn't frozen
console.log(frozen);
Dieses Beispiel zeigt, dass die Eigenschaften verschachtelter Objekte (und anderer Referenzdatenstrukturen) weiterhin veränderbar sind . Also Object.freeze()
nicht vollständig ‚einfrieren‘ das Objekt , wenn es Eigenschaften aufweist , die Referenzen sind (zum Beispiel Arrays, Objekte).