Ich habe in letzter Zeit viel ES6-Code für io.js geschrieben. In der Natur gibt es nicht viel Code, von dem ich lernen kann. Ich habe also das Gefühl, meine eigenen Konventionen zu definieren.
Meine Frage ist, wann man const
vs benutzt let
.
Ich habe diese Regel angewendet: Wenn möglich, benutze const
. Nur verwenden, let
wenn Sie wissen, dass sich der Wert ändern muss. (Sie können jederzeit zurückgehen und a const
in a ändern , let
wenn sich später herausstellt, dass Sie den Wert ändern müssen.)
Der Hauptgrund für diese Regel ist, dass es einfach ist, sie konsistent anzuwenden. Es gibt keine Grauzonen.
Die Sache ist, wenn ich diese Regel anwende, sind in der Praxis 95% meiner Erklärungen const
. Und das sieht komisch für mich aus. Ich benutze es nur let
für Dinge wie i
in einer for
Schleife oder gelegentlich für Dinge wie angesammelte Fibonacci-Summen (was im wirklichen Leben nicht besonders häufig vorkommt). Das hat mich überrascht - es stellte sich heraus, dass 95% der 'Variablen' in meinem ES5-Code bis jetzt für Werte waren, die nicht variieren. Aber const
überall in meinem Code zu sehen, fühlt sich irgendwie falsch an.
Meine Frage lautet also: Ist es in Ordnung, so const
viel zu verwenden? Sollte ich wirklich Dinge tun wie const foo = function () {...};
?
Oder sollte ich const
für solche Situationen reservieren, in denen Sie ein Literal am Anfang eines Moduls fest programmieren - wie Sie es in Großbuchstaben tun const MARGIN_WIDTH = 410;
?
quelle
const
so viel zu verwenden.function foo() {...}
ist besser als<anything> foo = function() {...}
function foo() {...}
die beim Debuggen zu geringfügigen Verwirrungen führen kann. Außerdem bedeutet seine Existenz, dass wir zwei Konstrukte haben, die dasselbe tun, aber eines von ihnen funktioniert nur in einem sehr spezifischen Kontext. (Sie können einen Funktionsausdruck überall dort verwenden, wo ein Ausdruck existieren kann, aber Sie können nur eine Funktionsdeklaration auf Anweisungsebene verwenden.) Wenn Sie die Kürze bevorzugen, besteht das Problem möglicherweise nur darin, dass die Funktionsausdruckssyntax das ganze Wort verwendetfunction
.Antworten:
Meine Antwort hier ist nicht Javascript-spezifisch.
Als Faustregel in jeder Sprache, die es mir erlaubt, dies auf eine einfache Art und Weise zu tun, würde ich sagen, benutze immer const / final / readonly / was auch immer es in deiner Sprache heißt, wann immer es möglich ist. Der Grund ist einfach, es ist viel einfacher, über Code zu urteilen, wenn es absolut offensichtlich ist, was sich ändern kann und was sich nicht ändern kann. Darüber hinaus können Sie in vielen Sprachen Tool-Unterstützung erhalten, die Ihnen mitteilt, dass Sie etwas falsch machen, wenn Sie versehentlich eine Variable zuweisen, die Sie als const deklariert haben.
Zurück zu gehen und eine Konstante in eine Let zu ändern, ist denkbar einfach. Und wenn Sie standardmäßig auf const umsteigen, überlegen Sie zweimal, bevor Sie dies tun. Und das ist in vielen Fällen gut so.
Wie viele Fehler haben Sie gesehen, bei denen sich Variablen unerwartet geändert haben? Ich würde viel raten. Ich weiß, dass die meisten Fehler, die ich sehe, unerwartete Zustandsänderungen beinhalten. Sie werden nicht alle diese Fehler loswerden, indem Sie großzügig const verwenden, aber Sie werden eine Menge von ihnen loswerden!
Viele funktionale Sprachen haben unveränderliche Variablen, bei denen standardmäßig alle Variablen const sind. Schauen Sie sich zum Beispiel Erlang oder F # an. Codierung ohne Zuweisung funktioniert in diesen Sprachen einwandfrei und ist einer der vielen Gründe, warum Menschen die funktionale Programmierung lieben. Um ein besserer Programmierer zu werden, muss man in diesen Sprachen viel über das Verwalten von Zuständen lernen.
Und alles beginnt damit, dass man mit const extrem liberal ist! ;) Es müssen nur noch zwei Zeichen geschrieben werden, verglichen mit let. Also los und
const
alles!quelle
const
ist zwei Zeichen mehr alslet
...val
in Scala (die eine Variable als unveränderlich deklariert) und nur der Verwendung vonvar
(dem veränderlichen Äquivalent), wenn wir es nicht verwenden könnenval
. Mit anderen Worten, wir deklarieren Variablen standardmäßig als unveränderlich und führen Veränderlichkeit nur dann ein, wenn wir sie unbedingt benötigen (was möglicherweise einfach daran liegt, dass der Veränderlichkeitsansatz sauberer ist).Seien Sie vorsichtig, da
const
Objektschlüssel veränderbar sind.Von hier aus: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
Betrachten Sie dieses Beispiel:
Gleiches gilt für Arrays:
Ich habe mich noch nicht entschieden, aber ich überlege, ob ich
const
für alle Nicht-Arrays / Nicht-Objekte undlet
für Objekte / Arrays verwenden soll.quelle
const
.colors = numbers
wird nicht funktionieren, wie erwartet. Wenn Sie Ihre Objekteigenschaften schützen möchten, können SieObject.freeze()
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…const moment = require('moment')
sei denn, Sie sind der Typ, der sich Sorgen macht, dass jemand es später versuchen wirdmoment = dead.fish(() => pizza)
.moment = Date.now()
. Aber auf jeden Fall sehe ich, wenn der Code eine Invariante annimmt, nichts Falsches daran, ihn wo immer möglich durchzusetzen.Mach dir keine Sorgen.
const
ist eine erstaunliche Ergänzung zu JavaScript, und ich würde empfehlen, dass Sie es an allen Orten verwenden, die es sinnvoll macht. Es sorgt für robusteren Code.Wenn es um Objekte geht,
const
wird Ihre Variable vor einer Neuzuweisung geschützt. Wenn Sie jedoch unveränderliche Objekte benötigen, benötigen Sie dieObject.freeze
Methode (siehe unten).const
schützt nur vor Neuzuweisung, und diefreeze
Methode schützt alle unmittelbaren Eigenschaften. Wenn alle verschachtelten Eigenschaften auch unveränderlich sein müssen, müssen Sie sie rekursivfreeze
ausführen.quelle
Object.freeze
flach ist.In meinem ES6
const
geht es nicht um Unveränderlichkeit , ich erkläre wasconst
genau laut Spezifikation bedeutet.Basierend auf diesen objektiven Fakten, hier ist meine persönliche Präferenz:
So subjektiv es auch sein mag, es ist eine Tatsache, dass dies der Absicht der Spezifikation am ehesten entspricht.
Personen, die
let
standardmäßigconst
Variablen verwenden, behandeln diese normalerweise als Konstanten (was nicht unbedingt beabsichtigt ist!). Jedem sein eigenes, aber ich bevorzuge es, Dinge für den beabsichtigten Zweck zu verwenden und nicht für einen erfundenen Sinn, den Menschen aufgrund eines Missverständnisses zuweisen.Die Verwendung
const
nur für Konstanten entspricht der Verwendung des HTML-<aside>
Elements nur für Seitenleisteninhalte.quelle
const
wenn es nicht konstant ist?const
ist, wofür es ist. Hast du das oben gelesen?const
ist, dass es heißtconst
. Es ist ein blöder Name (in Javascript), der viele (alle?) Entwickler zuerst verwirrt. IMO wäre besser, wennconst
man angerufen hättelet
(vor allem, weillet
es kürzer ist, aberconst
weitaus häufiger vorkommt) undlet
etwas anderes anrief .Mein persönlicher Ansatz, um die Lesbarkeit und das Verständnis des Codes zu verbessern:
let
ist nur für kurzlebige Variablen, die in einer einzelnen Zeile definiert und danach nicht mehr geändert werden. Im Allgemeinen die Variablen, die nur dazu dienen, die Anzahl der Eingaben zu verringern. Zum Beispiel:const
für alle Namen, von denen bekannt ist, dass sie über das gesamte Modul konstant sind. Ohne lokal konstante Werte. Dasvalue
obige Beispiel hat beispielsweise einen konstanten Gültigkeitsbereich und könnte mit deklariert werdenconst
, aber da es viele Iterationen gibt und für jede einen Wert mit dem gleichen Namen "value" gibt, könnte dies den Leser zum Denkenvalue
verleiten das Gleiche. Module und Funktionen sind das beste Beispiel fürconst
Variablen:var
für alles, was variabel sein kann oder nicht. Namen, die Personen, die den Code lesen, verwirren können, auch wenn sie lokal konstant sind und für die sie nicht geeignet sindlet
(dh sie werden nicht in einer einfachen direkten Deklaration vervollständigt), gelten als deklariert mitvar
. Zum Beispiel:Weitere Kommentare und mögliche zukünftige Updates hier .
quelle
JavaScript ist insofern etwas Besonderes, als Variablen Funktionen und ähnliches sein können, aber in C #, Java oder einer anderen ähnlichen Sprache im C-Stil berücksichtigen:
Das
const
ist seltsam, und das liegt daran, dass Methodendeklarationen in diesen Sprachen sich nicht ändern können, sobald sie zu etwas anderem kompiliert wurden.Warum sollte JavaScript anders sein? Es wird also nicht kompiliert, aber das bedeutet nicht, dass wir die Sicherheit, die Compiler bieten können, wegwerfen sollten. Die Verwendung des
const
Schlüsselworts gibt uns mehr Sicherheit, was sicherlich zu robusteren Anwendungen führen wird.quelle