2016-08-03 12 views
1

Ich dachte immer, dass const Variablen in JavaScript Konstanten ... wie "Variablen, die nicht ändern können".
Also nahm ich immer den Vorteil der Verwendung von Const über/var würde so etwas wie verringerte Ressourcenverbrauch.
Aber nach einem schnellen Test sah es so aus, als ob ein const so ziemlich wie eine Let-Variable agiert. Es ist Block-Bereich und kann geändert werden ... zumindest in meinem Browser (Firefox 47.0).Was ist der Punkt, eine Konstante in JavaScript zu deklarieren

Hier ist, was ich getan habe:

const FOO = [0,1,2] 
FOO[0] = 11 
console.log(FOO) // > [11, 1, 2] 

Und das führt zu meiner Frage: Was ist der Sinn von const verwenden? Ich meine das Wort ist länger, viele Menschen wissen nicht, const und es scheint gerade wie eine normale Variable zu handeln. Also warum sollte ich die Illusion geben, dass es nicht ist? Warum schreiben wir nicht einfach Konstanten, wie/var mit dem Namen in Großbuchstaben?

+9

Sie verwirren ** den Wert ** mutieren, indem Sie einen neuen Wert der Variablen zuweisen. Sie können "FOO" (d. H. "FOO = 23") keinen neuen Wert zuweisen, weil "FOO" "const" ist. Da Objekte jedoch in JavaScript * veränderbar * sind, können Sie das Objekt selbst immer noch mutieren. In Verbindung stehende Fragen: http://stackoverflow.com/q/31205975/218196, http://stackoverflow.com/q/22308071/218196, http://stackoverflow.com/q/26015747/218196 –

+2

Sie müssen suchen 'Object.freeze()' oder 'seal'. Speicherplätze können nicht ersetzt werden, wenn const verwendet wird, d. H. Es wird zu diesem Zeitpunkt ein Fehler ausgelöst. –

+0

Was konstant ist, ist der Objektverweis, nicht die Eigenschaften dieses Objekts. – Oriol

Antwort

2

Um es einfach zu sagen, der Wert des Objekts/Array ändert sich nicht, Sie mutieren nur die Eigenschaften des Objekts. Um zu demonstrieren:

const FOO  = {}; 
FOO.something = 'foo'; // [legal] mutating the object, but still the same object 
FOO   = {}; // [illegal] attempt to assign new object 

Arbeiten mit Objekten ist etwas weniger einfach, wenn etwa const im Vergleich zu anderen primitiven Typen Lernen:

const FOO  = 1; 
FOO   = 2; // [illegal] attempt to assign new value 
FOO   = []; // [illegal] attempt to assign new value 

die Frage zu beantworten, const ist nicht benötigt. Es ist ein Luxus der Programmierung, der verhindert, dass Programmierer sich in den Fuß schießen.

Es ist syntaktischer Zucker, der hilft, Werte zu sichern und Ideen zu den Betreuern zu kommunizieren, aber JavaScript-Entwickler konnten ohne sie seit Jahren gut programmieren. Es hilft nur, die Sprache zu verfeinern, indem es hilft, Fehler früher zu erkennen und zu verhindern und einige Konsistenz durchzusetzen.

Da Anwendungen/Module komplexer werden, wird die Notwendigkeit von Dolmetscher-/Transpiler-Unterstützung umso wichtiger und const kann dort ein großer Vorteil sein.


Auch beachten Sie, es gibt andere zusätzliche Vorteile. JavaScript-Engines sind beim Arbeiten mit Konstanten effizienter. Während die Leistungssteigerung marginal sein kann, müssen einige sehr intensive Anwendungen so viele Ressourcen wie möglich freisetzen.

Es ist einfacher zu denken Konstanten für beliebte Variablen einstellen:

const PI   = 3.1415926535; 
const E   = 2.71828; 
const GOLDEN_RATIO = 1.61803398874; 
const GRAVITY  = 9.807; 

Vereinbarungs verwende ich alle Kappen Globals und Konstanten zu unterscheiden.

0

nehme an, Sie einige Dinge wie hartkodierte

if(somevariable==""){ 
    do something 
} 

Ein weiteres approch

const EMPTY_STRING = "" 
if(somevariable==EMPTY_STRING){ 
do something 
} 
ist

irgendwann zu vergleichen, was passiert, wenn Sie etwas entwickeln Sie Dinge tun, vergleichen, wie if (somevariable == " ") {}

Sie vermissen Raum dort, wir können solche Fehler vermeiden.

Verwendung 2:

Wir können hartcodiert, was in const-Variable haben, die in so vielen Orten in js Datei verwendet wird. so können Sie es nur einmal hardcod

+0

Ich sehe nicht wirklich, warum const für diese tbh notwendig wäre. – Forivin

+0

Angenommen, Sie müssen eine Variable mit dem Wert 5 in 5 mal in einer js-Datei vergleichen. Wie werden Sie es tun? if (etwasVariable === 5). ist es nicht ?? jetzt kann ich es auch in var speichern. also warum const.Es erlaubt Ihnen nicht, es irrtümlich zu ändern, auch weil es konstant ist und konstant sein soll –

0

Der Punkt der Verwendung const erstellt unveränderliche Bindungen anstelle von veränderlichen Bindungen.

let foo = 1; 
foo = 2;   // 2 
foo;    // 2 
const bar = 1; 
bar = 2;   // TypeError: invalid assignment to const `bar' 
foo;    // 1 

So können Sie nicht den Wert in dieser Variablen gespeichert mutieren.

Sie können jedoch die Daten mutieren, die mit dem Wert in dieser Variablen verknüpft sind.

const obj = {foo: 'bar'}; 
obj = [1,2,3]; // TypeError: invalid assignment to const `bar' 
obj;    // {foo: 'bar'} 
obj.foo = 'baZ'; // 'baZ' 
obj.foo;   // 'baZ' 

Wenn Sie einige Eigenschaften eines Objekts nicht ändern möchten, können Sie sie als nicht beschreibbar oder nicht konfigurierbar definieren. Wenn Sie das Hinzufügen neuer Eigenschaften verhindern möchten, können Sie sie versiegeln oder einfrieren. Aber diese Konzepte sind völlig anders als konstante Variablen.

Verwandte Themen