Heim  >  Artikel  >  Web-Frontend  >  Objektveränderlichkeit in Javascript

Objektveränderlichkeit in Javascript

王林
王林Original
2024-07-20 07:44:38930Durchsuche

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 besteht darin, 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 -- immer noch 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. Nur 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. Der Variablenname wird dadurch jedoch 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. freeze() wurde auf das vorherige Objekt mit demselben Namen angewendet, aber das neue Objekt wurde nie eingefroren, sodass es veränderbar ist.

Versiegeln von Gegenständen

Es gibt Zeiten, in denen Sie vielleicht zulassen möchten, dass sich Werte in einem Objekt ändern, aber das Hinzufügen oder Entfernen von Eigenschaften 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 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.

Das obige ist der detaillierte Inhalt vonObjektveränderlichkeit in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn