Ceci est valable en php:
$x=$y='value';
Cela va forcément définir $ x et $ y sur 'value'.
Est-ce valide en javascript?
var x=y='value';
Je l'ai testé en console chrome et cela a fonctionné comme prévu, mais je voulais juste vérifier avant de commencer à l'utiliser.
Cela ne fonctionne que si le var y
qui avait été précédemment défini _, sinon y
sera global_.
Dans ce cas, vous feriez mieux de faire:
var x, y;
x = y = 'value';
Un autre antipattern qui crée des globales implicites consiste à enchaîner les assignations dans le cadre d'une déclaration Var. Dans l'extrait suivant, a
est local mais b
devient global, ce qui n'est probablement pas ce que vous vouliez faire:
// antipattern, do not use
function foo() {
var a = b = 0;
// ...
}
Si vous vous demandez pourquoi cela se produit, c’est à cause de l’évaluation de droite à gauche. Premièrement, L'expression b = 0
est évaluée et dans ce cas, b n'est pas déclaré. La valeur de retour de Cette expression est 0
et elle est affectée à la nouvelle variable locale déclarée avec var a
. En d’autres termes, c’est comme si vous aviez tapé:
var a = (b = 0);
Si vous avez déjà déclaré les variables, l’enchaînement des assignations convient et ne crée pas globales inattendues. Exemple:
function foo() {
var a, b;
// ...
a = b = 0; // both local
}
“JavaScript Patterns, de Stoyan Stefanov (O’Reilly). Copyright 2010 Yahoo !, Inc., 9780596806750. ”
Pour éviter que y ne devienne une variable globale, utilisez ce qui suit:
var x, y = x = 'value';
Apparemment, les déclarations sont simplement évaluées de gauche à droite.
Je suis à peu près sûr que la forme la plus lisible est celle qui n'a pas encore été évoquée:
let x = 0, y = 0
Oui, c'est valide en Javascript.
Cependant, après avoir recherché le problème sur Google, cette question relative au débordement de pile explique certaines mises en garde, utilisez-la avec prudence.
Lorsque vars ont des valeurs différentes, vous pouvez facilement écrire:
var x = 0,
y = 1,
...
z = 2;