2016-06-15 6 views
0

Dieses Verhalten mit JavaScript-Konstanten zu bemerken ... Es sieht so aus, als ob das const-Schlüsselwort Unveränderlichkeit verliert, wenn es um Objekte geht.JavaScript konstantes Verhalten?

Möchten Sie Ihre Meinung zu diesem Verhalten wissen?

const fruits = 'banana'; 
fruit = 'apple'; 
console.log(fruit); // 'banana' as expected 

//---------------------------------------------------------------------- 

const fruit = ['apple']; 
fruit.push('banana'); 
console.log(fruit); // ['apple', 'banana'] ??????? 

fruit = 'anything'; 
console.log(fruit); // ['apple', 'banana'] as expected; 

//---------------------------------------------------------------------- 

const brands = {}; 
brands = []; 
console.log(brands); // {} as expected 

brands.sony = "playstation" 
console.log(brands); // {sony:'playstation'} ??????? 
+4

Von MDN: 'Die const-Deklaration erstellt einen schreibgeschützten Verweis auf einen Wert. Es bedeutet nicht, dass der Wert, den er enthält, unveränderlich ist, nur dass der Variablenbezeichner nicht neu zugewiesen werden kann.' Hilft das? – Mjh

+0

Bitte lesen Sie [fragen], bevor Sie eine Frage stellen. Die erste Überschrift auf dieser Seite lautet "Suchen und Recherchieren". Dies ist bereits an vielen, vielen Stellen im Internet abgedeckt. –

+0

Welchen Browser benutzen Sie? – ISONecroMAn

Antwort

1

Object.freeze und Object.seal einführen wird die Funktionalität die Sie suchen. Beide Methoden verhindern, dass neue Eigenschaften hinzugefügt oder vorhandene entfernt werden, während die ersteren auch verhindern, dass bereits vorhandene bearbeitet werden.

Ich mag die aktuelle Verwendung von const, zum Beispiel bei der Deklaration großer Module oder Namespaces an der Spitze der Dateien. Es ist nur ein bisschen Schutz vor der ganzen Menge überschrieben, während Sie immer noch interagieren können.

+1

* const * hilft in dieser Hinsicht nicht wirklich viel. Wenn etwas versucht, es zu überschreiben und fehlschlägt, dann wird nun alles, was vom Überschreiben abhängig war, fehlschlagen, selbst wenn das "erste Mal" nicht funktioniert. In beiden Fällen sollte das Problem beim Testen festgestellt werden. – RobG

+0

@RobG Sie sind richtig, es sollte in der Prüfung gefangen werden, aber nicht jeder ist mit einem Team gesegnet, das Best Practices in Bezug auf das Testen folgt! Wenn der Fehler nicht sofort offensichtlich ist, könnte ein Entwickler viel Zeit verschwenden, bevor der Test den Fehler entdeckt - die Verwendung eines "const" anstelle eines "var" kostet nichts. – Jess

3

Javascript-Konstanten, wie Java-Konstanten, sind unveränderlich. Aber Sie müssen sie als Zeiger auf Werte sehen. Sie beziehen sich immer auf den gleichen Wert. Dieser Wert kann ein primitiver Wert oder ein Objekt sein. Sie können also den Verweis auf ein anderes Objekt nicht ändern, aber Sie können dieses Objekt ändern (wenn es änderbar ist, sind primitive Typen nicht).

const TEST={ name: 'myObject'} 
TEST= ... // this always does nothing, the current reference cannot be changed 
TEST.name=... //this changes the state of the current reference. 

@Jess 'Antwort bietet Ihnen die Möglichkeit, ein Objekt nicht änderbar zu machen.

Verwandte Themen