Ich habe mehrere Variablen im globalen Bereich in einer JavaScript-Datei initialisiert:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Ich muss alle diese Variablen auf false setzen. Dies ist der Code, den ich derzeit habe:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
Gibt es eine Möglichkeit, alle diese Variablen in einer Codezeile auf den gleichen Wert zu setzen, oder gibt es den Code, für den ich derzeit die beste Möglichkeit habe?
javascript
SUB-HDR
quelle
quelle
Antworten:
Nichts hindert dich daran
Überprüfen Sie dieses Beispiel
quelle
function MyObj(){this.x=1} var a,b; a = b = new MyObj(); ++a.x
erhöht auch dieb.x
Eigenschaft.Nichts hindert Sie daran, das oben Genannte zu tun, aber halten Sie!
Es gibt einige Fallstricke. Die Zuweisung in Javascript erfolgt von rechts nach links. Wenn Sie also schreiben:
es übersetzt effektiv zu:
was effektiv übersetzt bedeutet:
Sie haben versehentlich gerade 5 globale Variablen erstellt - etwas, von dem ich mir ziemlich sicher bin, dass Sie es nicht wollten.
Hinweis: In meinem obigen Beispiel wird davon ausgegangen, dass Sie Ihren Code im Browser ausführen
window
. Wenn Sie sich in einer anderen Umgebung befinden, werden diese Variablen an den globalen Kontext für diese Umgebung angehängt (dh in Node.jsglobal
wird an den globalen Kontext für diese Umgebung angehängt).Jetzt können Sie zuerst alle Ihre Variablen deklarieren und sie dann demselben Wert zuweisen, um das Problem zu vermeiden.
Kurz gesagt, beide Wege würden gut funktionieren, aber der erste Weg könnte möglicherweise einige schädliche Fehler in Ihren Code einbringen. Begehen Sie nicht die Sünde, den globalen Namespace mit lokalen Variablen zu verunreinigen, wenn dies nicht unbedingt erforderlich ist.
Nebenbemerkung: Wie in den Kommentaren ausgeführt (und dies gilt nicht nur für diese Frage), sollten Sie besser wissen, ob es sich bei dem fraglichen kopierten Wert um einen primitiven Wert, sondern um ein Objekt handelt. Bei der Zuweisung von Objekten wird der Verweis auf das Objekt anstelle des eigentlichen Objekts kopiert. Alle Variablen verweisen weiterhin auf dasselbe Objekt, sodass sich jede Änderung an einer Variablen in den anderen Variablen widerspiegelt und Ihnen große Kopfschmerzen bereitet, wenn Sie die Objektwerte und nicht die Referenz kopieren möchten.
quelle
moveUp
davon, dass es sich um ein Block-Scoping handelt, würde es keinen Unterschied machen. Es würden noch 5 globale Variablen deklariert.var a, b, c; a = b = c = 10;
sich sehr vonvar a = b = c = 10;
. Die akzeptierte Antwort ist also richtig. Sie sprechen ein Problem an, das nicht mit der akzeptierten Antwort zusammenhängt.Es gibt eine andere Option, die keine globalen Fallstricke einführt, wenn versucht wird, mehrere Variablen mit demselben Wert zu initialisieren. Ob es dem langen Weg vorzuziehen ist oder nicht, ist eine Entscheidung. Es wird wahrscheinlich langsamer sein und kann besser lesbar sein oder auch nicht. In Ihrem speziellen Fall denke ich, dass der lange Weg wahrscheinlich besser lesbar und wartbar sowie schneller ist.
Der andere Weg nutzt die Destrukturierungszuweisung .
Auf diese Weise können Sie eine Reihe von initialisieren
var
,let
oderconst
Variablen auf den gleichen Wert in einer Zeile alle mit dem gleichen erwarteten Umfang.Verweise:
MDN: Array Global Object
MDN: Array.fill
quelle
same
Objekt. Änderungen an einem wirken sich auf die anderen aus ...Fügen Sie die Variable in ein Array ein und verwenden Sie eine for-Schleife, um mehreren Variablen denselben Wert zuzuweisen.
quelle