Javascript Wie definiere ich mehrere Variablen in einer einzigen Zeile?

103

Wenn ich die Dokumentation online lese, bin ich verwirrt darüber, wie mehrere JavaScript-Variablen in einer einzigen Zeile richtig definiert werden.

Wenn ich den folgenden Code komprimieren möchte, wie kann JavaScript "streng" richtig definiert werden, um mehrere Javascript-Variablen in einer einzigen Zeile zu definieren?

var a = 0;
var b = 0;

Ist es:

var a = b = 0;

oder

var a = var b = 0; 

etc...

HeatherK
quelle
1
Mehr zur Mehrfachzuweisung: Wie funktioniert die Variablenzuweisung in JavaScript? . Ich finde dieses Muster nützlich in einem Verschluss, um Konstruktorfunktionen freizulegen:var $cls = my.namespace.Foo = function(args){ ... }
blong
Ich frage mich, warum Sie es überhaupt verdichten wollen. IMHO ist das Deklarieren und Zuweisen eines Variablers nach dem anderen für jeden viel klarer und verständlicher.
Henning

Antworten:

75

Sie möchten sich auf Kommas verlassen, denn wenn Sie sich auf das Konstrukt mit mehreren Zuweisungen verlassen, schießen Sie sich an der einen oder anderen Stelle in den Fuß.

Ein Beispiel wäre:

>>> var a = b = c = [];
>>> c.push(1)
[1]
>>> a
[1]

Sie beziehen sich alle auf dasselbe Objekt im Speicher. Sie sind nicht "eindeutig", da jedes Mal, wenn Sie auf ein Objekt (Array, Objektliteral, Funktion) verweisen, es als Referenz und nicht als Wert übergeben wird. Wenn Sie also nur eine dieser Variablen ändern und möchten, dass sie individuell agieren, erhalten Sie nicht das, was Sie möchten, da es sich nicht um einzelne Objekte handelt.

Die Mehrfachzuweisung hat auch den Nachteil, dass die sekundären Variablen global werden und Sie nicht in den globalen Namespace gelangen möchten.

(function() {  var a = global = 5 })();
alert(window.global) // 5

Verwenden Sie am besten nur Kommas und vorzugsweise viele Leerzeichen, damit es lesbar ist:

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];
meder omuraliev
quelle
2
Das ist wirklich ein Problem beim Zuweisen von Array-Referenzen im Allgemeinen, nicht nur bei Zuweisungsanweisungen als Werte.
Matthew Flaschen
"Also, während Sie mit mehreren Aufgaben für die rechte Hand für Dinge wie numerische Literale
davonkommen können
1
@meder, es ist ein Problem mit irgendwelchen Aufgaben. Die rechte Hand hat nichts Besonderes.
Matthew Flaschen
Ich meinte Aufgaben im Allgemeinen. Bearbeitete Formulierung.
Meder Omuraliev
2
Bei diesem Mehrfachzuweisungsmuster ist zu beachten, dass jede nicht deklarierte Zuweisung im ES5-Strict-Modus eine ReferenceErrorAusnahme verursacht ... IMO, sie sollten vermieden werden ...
CMS
64

Mit es6 oder dem Knoten von Javascript können Sie Folgendes tun:

var [a,b,c,d] = [0,1,2,3]

Wenn Sie problemlos mehrere Variablen in einer Zeile drucken möchten, gehen Sie wie folgt vor:

console.log(a, b, c, d)

0 1 2 3

Dies ähnelt der Antwort von @alex grey hier, aber dieses Beispiel ist in Javascript anstelle von CoffeeScript.

Beachten Sie, dass hierfür die Array-Destrukturierungszuweisung von Javascript verwendet wird

Modulitos
quelle
2
Warum nicht console.log(a,b,c,d)stattdessen in diesem Fall verwenden? es ist kürzer und gibt die gleiche Ausgabe
Josh Broadhurst
44

Es gibt keine Möglichkeit, dies in einer Zeile mit Zuweisung als Wert zu tun.

var a = b = 0;

macht b global. Ein korrekter Weg (ohne leckende Variablen) ist der etwas längere:

var a = 0, b = a;

was in dem Fall nützlich ist:

var a = <someLargeExpressionHere>, b = a, c = a, d = a;
Matthew Flaschen
quelle
1
"Es gibt keine Möglichkeit, die Zuweisung als Wert zu verwenden, ohne 0 zu wiederholen." - Was meinst du?
Palswim
28

Warum nicht in zwei Zeilen?

var a, b, c, d;    // All in the same scope
a = b = c = d = 1; // Set value to all.

Der Grund dafür ist, den lokalen Bereich für Variablendeklarationen wie folgt beizubehalten:

var a = b = c = d = 1;

zu den impliziten Erklärungen führen b, cund dauf dem Fenster Umfang.

Nick L.
quelle
Dies war nützlich für mich, da ich in meinem Programm viele Variablen im Voraus deklariere. Anstatt mehr als 30 Zeilen zu verwenden, kann ich jetzt einige Zeilen verwenden, ohne die Lesbarkeit zu beeinträchtigen.
Kalif Vaughn
11

Hier ist die neue ES6-Methode zur Deklaration mehrerer Variablen in einer Zeile:

const person = { name: 'Prince', age: 22, id: 1 };

let {name, age, id} = person;

console.log(name);
console.log(age);
console.log(id);

* Ihr Variablenname und Ihr Objektindex müssen identisch sein

Prinz Ahmed
quelle
2
Das ist länger als die Frage des OP, weil es gleichbedeutend ist mit let { a, b } = { a: 0, b: 0 }.
Dan Dascalescu
4

Insbesondere wenn Sie N Variablen mit demselben Wert (z. B. 0) initialisieren möchten , können Sie mithilfe der Array-Destrukturierung und Array.fill den Variablen ein Array von Ns zuweisen 0:

let [a, b, c, d] = Array(4).fill(0);

console.log(a, b, c, d);

Dan Dascalescu
quelle
0

Beachten Sie, dass Sie dies nur mit Zahlen und Zeichenfolgen tun können

du könntest es tun...

var a, b, c; a = b = c = 0; //but why?

c++;
// c = 1, b = 0, a = 0;
PDA
quelle