138 votes

Javascript Comment définir plusieurs variables sur une seule ligne ?

En lisant la documentation en ligne, je ne sais pas comment définir correctement plusieurs variables JavaScript sur une seule ligne.

Si je veux condenser le code suivant, quelle est la manière correcte et "stricte" de définir plusieurs variables javascript sur une seule ligne ?

var a = 0;
var b = 0;

C'est ça :

var a = b = 0;

o

var a = var b = 0; 

etc...

1 votes

En savoir plus sur l'affectation multiple : Comment fonctionne l'affectation des variables en JavaScript ? . Je trouve ce modèle utile à l'intérieur d'une fermeture pour exposer les fonctions du constructeur : var $cls = my.namespace.Foo = function(args){ ... }

109voto

Lucas Points 804

En utilisant es6 ou node de Javascript, vous pouvez faire ce qui suit :

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

Et si vous voulez imprimer facilement plusieurs variables sur une seule ligne, il suffit de faire ceci :

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

0 1 2 3

Cette réponse est similaire à celle de @alex gray, mais cet exemple est en Javascript au lieu de CoffeeScript.

Notez que cela utilise la fonction affectation de déstructuration des tableaux

3 votes

Pourquoi ne pas utiliser console.log(a,b,c,d) dans ce cas à la place ? c'est plus court et donne le même résultat

89voto

meder Points 81864

Vous devez vous appuyer sur les virgules, car si vous vous appuyez sur la construction des affectations multiples, vous vous tirerez une balle dans le pied à un moment ou à un autre.

Un exemple serait :

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

Ils font tous référence au même objet en mémoire, ils ne sont pas "uniques" puisque chaque fois que vous faites une référence à un objet (tableau, littéral d'objet, fonction), elle est passée par référence et non par valeur. Donc, si vous modifiez une seule de ces variables et que vous voulez qu'elles agissent individuellement, vous n'obtiendrez pas ce que vous voulez car elles ne sont pas des objets individuels.

Il y a également un inconvénient à l'affectation multiple, dans la mesure où les variables secondaires deviennent des variables globales, et vous ne voulez pas avoir de fuite dans l'espace de noms global.

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

Il est préférable d'utiliser des virgules et, de préférence, de laisser beaucoup d'espaces pour que le texte soit lisible :

var a = 5
  , b = 2
  , c = 3
  , d = {}
  , e = [];

2 votes

Il s'agit en fait d'un problème lié à l'affectation de références de tableaux en général, et pas seulement aux instructions d'affectation de valeurs.

0 votes

"Donc, alors que vous pouvez vous en tirer avec de multiples affectations de la main droite pour des choses comme les littéraux numériques"

1 votes

@meder, c'est un problème avec toutes les affectations. La main droite n'a rien de spécial.

52voto

Matthew Flaschen Points 131723

Il n'y a aucun moyen de le faire en une seule ligne avec l'affectation comme valeur.

var a = b = 0;

rend b global. Une manière correcte (sans fuite de variables) est la méthode légèrement plus longue :

var a = 0, b = a;

ce qui est utile dans ce cas :

var a = <someLargeExpressionHere>, b = a, c = a, d = a;

1 votes

"Il n'y a aucun moyen d'utiliser l'affectation comme valeur sans répéter le 0." - Que voulez-vous dire ?

43voto

Nick L. Points 640

Pourquoi ne pas le faire en deux lignes ?

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

La raison pour laquelle, est de préserver la portée locale sur les déclarations de variables, comme ceci :

var a = b = c = d = 1;

conduira à des déclarations implicites de b , c y d sur l'étendue de la fenêtre.

0 votes

Cela m'a été utile car je déclare de nombreuses variables à l'avance dans mon programme. Maintenant, au lieu de prendre plus de 30 lignes, je peux utiliser quelques lignes sans sacrifier la lisibilité.

15voto

Prince Ahmed Points 376

Voici la nouvelle méthode ES6 de déclaration de plusieurs variables en une seule ligne :

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

let {name, age, id} = person;

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

* Le nom de votre variable et l'index de l'objet doivent être identiques

4 votes

C'est plus long que la question de l'OP, car c'est équivalent à let { a, b } = { a: 0, b: 0 } .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X