389 Stimmen

Const in JavaScript: wann es zu verwenden ist und ist es notwendig?

Ich bin kürzlich auf das const Schlüsselwort in JavaScript gestoßen. Soweit ich sehen kann, wird es verwendet, um unveränderliche Variablen zu erstellen, und ich habe getestet, um sicherzustellen, dass es nicht neu definiert werden kann (in Node.js):

const x = 'const';
const x = 'not-const';

// Wird einen Fehler liefern: 'Konstante 'x' wurde bereits definiert'

Ich weiß, dass es noch nicht in allen Browsern standardisiert ist - aber ich bin nur am Kontext von Node.js V8 interessiert, und ich habe bemerkt, dass bestimmte Entwickler / Projekte es stark bevorzugen, obwohl das var-Schlüsselwort den gleichen Effekt erzielen könnte.

  • Wann ist es angemessen, const anstelle von var zu verwenden?
  • Sollte es jedes Mal verwendet werden, wenn eine Variable deklariert wird, die nicht neu zugewiesen wird?
  • Macht es tatsächlich einen Unterschied, ob var anstelle von const oder umgekehrt verwendet wird?

493voto

Tibos Punkte 27201

Es gibt zwei Aspekte zu Ihren Fragen: Was sind die technischen Aspekte der Verwendung von const anstelle von var und was sind die mit den Menschen verbundenen Aspekte.

Der technische Unterschied ist signifikant. In kompilierten Sprachen wird eine Konstante zur Kompilierzeit ersetzt und ihre Verwendung ermöglicht andere Optimierungen wie das Entfernen von nicht ausgeführtem Code, um die Laufzeit-Effizienz des Codes weiter zu erhöhen. Aktuelle (lose verwendeten Begriff) JavaScript-Engines kompilieren tatsächlich JS-Code, um eine bessere Leistung zu erzielen, sodass die Verwendung des const-Schlüsselworts ihnen mitteilen würde, dass die oben beschriebenen Optimierungen möglich und durchzuführen sind. Dies führt zu einer besseren Leistung.

Der mit den Menschen verbundene Aspekt bezieht sich auf die Semantik des Schlüsselworts. Eine Variable ist eine Datenstruktur, die Informationen enthält, die voraussichtlich geändert werden. Eine Konstante ist eine Datenstruktur, die Informationen enthält, die sich niemals ändern werden. Wenn Fehlermöglichkeiten bestehen, sollte immer var verwendet werden. Nicht alle Informationen, die sich während der Laufzeit eines Programms nie ändern müssen, müssen jedoch mit const deklariert werden. Wenn sich die Informationen unter verschiedenen Umständen ändern sollen, verwenden Sie var, um dies anzuzeigen, auch wenn die tatsächliche Änderung in Ihrem Code nicht erscheint.

78voto

James Donnelly Punkte 122040

Aktualisierung 2017

Diese Antwort erhält immer noch viel Aufmerksamkeit. Es ist erwähnenswert, dass diese Antwort Anfang 2014 veröffentlicht wurde und sich seitdem viel geändert hat. Die Unterstützung von ecmascript-6 ist mittlerweile Standard. Alle modernen Browser unterstützen jetzt const, sodass es ziemlich sicher verwendet werden kann, ohne Probleme zu verursachen.


Ursprüngliche Antwort von 2014

Trotz einer ziemlich guten Browserunterstützung würde ich empfehlen, es derzeit nicht zu verwenden. Aus dem MDN-Artikel über const:

Die derzeitige Implementierung von const ist eine Mozilla-spezifische Erweiterung und ist nicht Teil von ECMAScript 5. Es wird in Firefox & Chrome (V8) unterstützt. Ab Safari 5.1.7 und Opera 12.00, wenn Sie eine Variable in diesen Browsern mit const definieren, können Sie den Wert später noch ändern. Es wird in Internet Explorer 6-10 nicht unterstützt, ist jedoch in Internet Explorer 11 enthalten. Das const-Schlüsselwort deklariert derzeit die Konstante im Funktionsbereich (wie Variablen, die mit var deklariert wurden).

Dann heißt es weiter:

const wird von ECMAScript 6 definiert, jedoch mit anderen Semantiken. Ähnlich wie bei Variablen, die mit dem let-Statement deklariert wurden, werden Konstanten, die mit const deklariert wurden, blockgebunden sein.

Wenn Sie const verwenden, müssen Sie eine Workaround-Lösung hinzufügen, um auch leicht ältere Browser zu unterstützen.

58voto

math2001 Punkte 3818

Für den Gebrauch von const ist Tibos Antwort großartig.

Aber du hast gesagt:

Wie es scheint, wird es verwendet, um unveränderliche Variablen zu erstellen

Das ist falsch. Eine Variable zu mutieren ist etwas anderes als sie neu zuzuweisen:

var hello = 'Welt' // Zuweisen
hello = 'Bonjour!' // Neu zuweisen

Mit const kannst du das nicht tun:

const hello = 'Welt'
hello = 'Bonjour!' // Fehler

Aber du kannst deine Variable mutieren:

const marks = [92, 83]
marks.push(95)
console.log(marks) // [92, 83, 95] -> die Variable wurde mutiert.

Also, jeder Prozess, der den Wert der Variable ohne das Zeichen = verändert, mutiert die Variable.

Hinweis: += ist beispielsweise ... das Neu-Zuweisen!

var a = 5
a += 2 // Ist dasselbe wie a = a + 2

Also, das Fazit ist: const hindert dich nicht am Mutieren von Variablen; es hindert dich am Neu-Zuweisen von ihnen.

40voto

janesconference Punkte 6145

Um die vorherigen Antworten zu integrieren, gibt es einen offensichtlichen Vorteil beim Deklarieren von Konstanten Variablen, abgesehen vom Leistungsgrund: Wenn Sie versehentlich versuchen, sie im Code zu ändern oder neu zu deklarieren, wird das Programm den Wert entsprechend nicht ändern oder einen Fehler werfen.

Zum Beispiel:

// Wird 'SECRET' ausgeben

const x = 'SECRET'
if (x = 'ANOTHER_SECRET') {  // Warnung! Zuweisen einer Variablen in einer 'if'-Bedingung
    console.log (x)
}

mit:

// Wird 'ANOTHER_SECRET' ausgeben

var y = 'SECRET'
if (y = 'ANOTHER_SECRET') {
    console.log (y)
}

oder

// Wird TypeError werfen: Konstante 'x' wurde bereits deklariert

const x = "SECRET"

/* Komplexer Code */

var x = 0

mit

// Wird y neu zuweisen und Probleme verursachen

var y = "SECRET"

/* Komplexer Code */

var y = 0

32voto

Anthony Punkte 11974

const ist nicht unveränderlich.

Vom MDN:

Die const-Deklaration erstellt eine schreibgeschützte Referenz zu einem Wert. Das bedeutet nicht, dass der Wert unveränderlich ist, sondern nur, dass die Variable nicht neu zugewiesen werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X