2017-11-06 3 views
0

meine Frage ist einfach über Const. Ich habe viele Orte gesehen, die Entwickler bevorzugen const über let und var während der Deklaration von Objekt sogar seine Eigenschaften sind veränderbar. Könnte jemand das erklären?Warum wird Const häufig in der Objektdeklaration verwendet, während seine Eigenschaften geändert werden könnten?

const a = {}; 
a.name = ""; 
console.log(a.name); 
+0

'const' erstellt einen unveränderlichen Verweis, so dass Sie keinen anderen Wert zuweisen können. 'let' soll einen gemeinsamen Verweis erstellen, aber in den Gültigkeitsbereich eingegrenzt werden (Sie können ihn nicht außerhalb der Funktion verwenden). –

+0

'const a = {};' bedeutet nur, dass 'a' immer dasselbe Objekt ist, nicht mehr und nicht weniger. – Xufox

Antwort

0

Es verhindert a (in Ihrem Beispiel) aus einer anderen Referenz zugewiesen werden, aber Eigenschaften innerhalb des Objekts werden häufig geändert werden muß, da sie den aktuellen Zustand der Objektinstanz vermitteln.

Eine einfache Analogie, die hier richtiger ist?

var me = "Scott"; 
const me = "Scott"; 

Was passiert, wenn das passiert?

me = you; 

Lasst uns die Tatsache vergessen, dass, im wirklichen Leben, können Sie, wenn Sie es wirklich wollen Namen ändern. In diesem Fall me sollte immer und ewig verweisen, nun, ich - "Scott" so const ist die bessere Erklärung.

Aber in meinem Leben werden sich die Eigenschaften von mir ändern, einige, die ich nicht kontrollieren kann und andere, die ich kontrolliere. Während wir also ein anderes Objekt verweisen nicht auf die me Referenz ändern möchten, Aspekte des Objekts, me Verweist der Lage sein sollte geändert werden:

const me = {}; 
me.height = "6' 1"; // Used to be 6' 3" back in the day! 

Aber, wenn Sie einen konstanten Wert benötigt In einem Objekt können Sie eine private Variable in einer Konstruktorfunktion deklarieren, um dies zu tun.

function Me(height){ 
    // Some aspects of this object will never change. They can be set up 
    // as private data: 
    const bloodType = "B+"; 

    // Others are just properties: 
    this.height = height; 
} 

Oder könnten Sie auch weiterhin ein Objektliteral verwenden, aber Sie müssen zu „sperren“, um bestimmte Eigenschaften, so dass du schreibgeschützt. Dies geschieht mit Object.defineProperty.

+0

Es gibt auch 'Object.freeze'. – Xufox

+0

@Xufox Wie würde 'Object.freeze' einen Wert innerhalb einer Objektkonstante halten? '.freeze()' friert das gesamte Objekt ein. –

+0

Richtig, Sie sagten "ein konstanter Wert", nicht "alle Werte konstant". Sicher, 'Object.freeze' würde alle Werte konstant halten; nur eine Konstante konstant zu halten, wäre anders. – Xufox

1

Einfach um zu verhindern, dass das Objekt selbst überschrieben oder sein Typ geändert wird. Die Konstante wird immer ein Objekt sein.

Uncaught TypeError: Assignment to constant variable.

0

Nach MDN

Die constErklärung auf einen Wert ein Nur-Lese-Referenz erstellt:

const a = {}; 
a = 'foo'; 
const b = {}; 
b = { foo: 'bar' }; 

wird Beide werfen. Es tut nicht bedeuten, dass der Wert, den es enthält, unveränderlich ist, nur dass der Variablenbezeichner nicht neu zugewiesen werden kann. Wenn beispielsweise der Inhalt ein Objekt ist, bedeutet dies, dass der Inhalt des Objekts (z. B. seine Parameter) geändert werden kann.

Verwandte Themen