„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Objektveränderlichkeit in Javascript

Objektveränderlichkeit in Javascript

Veröffentlicht am 19.08.2024
Durchsuche:507

Object Mutability in Javascript

Objektveränderlichkeit

Veränderlichkeit ist die Fähigkeit, einen Wert zu ändern. Ein veränderlicher Wert kann geändert werden, und ein unveränderlicher Wert kann nicht geändert werden. Ein häufiges Missverständnis ist, dass das Schlüsselwort „const“ eine Variable unveränderlich macht.

const

Tatsächlich verhindert „const“ nur eine Neuzuweisung. Bei Nicht-Objekttypen können Werte nur durch Neuzuweisung geändert werden, sodass sie durch die Deklaration mit „const“ tatsächlich unveränderlich werden. Betrachten Sie zum Beispiel den folgenden Code:

const num = 5;
num = 7; // illegal reassignment of const variable

Es gibt keine Möglichkeit, den Wert von num in diesem Code zu ändern. Beachten Sie, dass die Verwendung von oder -- weiterhin als Neuzuweisungen betrachtet wird und dies in der Fehlermeldung angezeigt wird, wenn wir versuchen, sie für eine mit const.
deklarierte Variable zu verwenden.

const num = 5;
num  ;//illegal reassignment of constant

Der resultierende Fehler ist:

Uncaught TypeError: Assignment to constant variable.

const-Objekte können veränderbar sein

Objekte unterscheiden sich hinsichtlich der Veränderlichkeit grundlegend darin, dass sich ihre Werte ändern können, ohne dass die Variable neu zugewiesen werden muss. Beachten Sie, dass die Neuzuweisung von Eigenschaften durch „const“ nicht verhindert wird. Lediglich die Neuzuweisung des Variablennamens wird verhindert.

const obj = {num: 5};
obj.num = 7; //legal
obj = {num: 7}; //illegal reassignment 

Objekte können auch Methoden haben, die die internen Werte ändern.

const obj = {
    num: 5,
    increment(){
        this.num  ;
    }
}
obj.increment();
console.log(obj.num); //6

Ein Objekt unveränderlich machen

Es ist möglich, ein Objekt tatsächlich unveränderlich zu machen, indem man es mit „const“ deklariert und Object.freeze() verwendet.

const obj = {num: 5};
Object.freeze(obj);
obj.num = 7; // doesn't change
console.log(obj.num);// still 5

Beachten Sie, dass bei Verwendung des strikten Modus der Versuch, den Num-Wert zu ändern, tatsächlich zu einem Absturz mit der folgenden Fehlermeldung führen würde:

Cannot assign to read only property 'num'

Die Verwendung von Object.freeze() ohne „const“ reicht bereits aus, um dieses Objekt unveränderlich zu machen. Allerdings wird der Variablenname dadurch nicht unveränderlich.

let obj = {num: 5};
Object.freeze(obj);
obj = {num: 5}; // new object with old name
obj.num = 7; // changes successfully
console.log(obj.num);// 7

Was in dieser Version des Codes passiert, ist, dass obj neu zugewiesen wird. Die Funktion „freeze()“ wurde auf das vorherige Objekt mit demselben Namen angewendet, das neue Objekt wurde jedoch nie eingefroren, sodass es veränderbar ist.

Versiegeln von Gegenständen

Es gibt Zeiten, in denen Sie möglicherweise zulassen möchten, dass sich Werte in einem Objekt ändern, das Hinzufügen oder Entfernen von Eigenschaften jedoch nicht zulassen möchten. Dies kann durch die Verwendung von Object.seal() erreicht werden.

let obj = {num: 5};
Object.seal(obj);
obj.num = 7; // changes
console.log(obj.num);// 7
obj.newValue = 42; //cannot add new property to sealed object
console.log(obj.newValue);//undefined
delete obj.num; //cannot delete property from sealed object
console.log(obj.num);// still exists and is 7

Granulare Kontrolle

Das Einfrieren und Versiegeln gilt für das gesamte Objekt. Wenn Sie bestimmte Eigenschaften unveränderlich machen möchten, können Sie dies mit defineProperty() oder defineProperties() tun. Die Wahl zwischen diesen beiden hängt davon ab, ob Sie eine einzelne Eigenschaft oder mehrere Eigenschaften beeinflussen möchten.

const obj = {};
Object.defineProperty(obj, 'num',{
    value: 5,
    writable: false,
    configurable: false
});
obj.num = 7; // Cannot change value because writable is false
delete obj.num; // Cannot delete because configurable is false
console.log(obj.num);//Still exists and is 5

In diesem Beispiel wird eine neue Eigenschaft definiert, aber defineProperty() kann auch für eine vorhandene Eigenschaft verwendet werden. Beachten Sie, dass wenn „configurable“ zuvor auf „false“ gesetzt war, es nicht in „true“ geändert werden kann. Wenn es jedoch ursprünglich „true“ war, kann es auf „false“ gesetzt werden, da diese Änderung als eine Art von Konfiguration zählt.

Abschluss

In den meisten Fällen müssen Sie nicht garantieren, dass ein Objekt unveränderlich ist. Wenn ein solcher Bedarf besteht, reicht es im Allgemeinen aus, das Objekt einzufrieren, aber wir haben zusätzliche Optionen für feinere Kontrollen, wenn ein solcher Bedarf besteht.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/chooking/object-mutability-in-javascript-1nk4?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3