This is valid in php:
$x=$y=\'value\';
This will in esscence set both $x and $y to \'value\'.
Is this valid in javascript?
I'm pretty sure that the most readable form is the one that has not been brought up yet:
let x = 0, y = 0
To prevent the y from becoming a global variable, use the following:
var x, y = x = 'value';
Apparently the declarations are simply evaluated from left to right.
When vars have different values you can easily write:
var x = 0,
y = 1,
...
z = 2;
Yes, that is valid in Javascript.
However, after googling the problem, this Stack Overflow question explains some caveats, so use with caution.
It only works if the var y
as been previously defined, otherwise y
will be global.
In such case, you better do:
var x, y;
x = y = 'value';
Another antipattern that creates implied globals is to chain assignments as part of a
var declaration. In the following snippet, a
is local but b
becomes global, which is
probably not what you meant to do:
// antipattern, do not use
function foo() {
var a = b = 0;
// ...
}
If you’re wondering why that happens, it’s because of the right-to-left evaluation. First,
the expression b = 0
is evaluated and in this case b is not declared. The return value of
this expression is 0
, and it’s assigned to the new local variable declared with var a
. In
other words, it’s as if you’ve typed:
var a = (b = 0);
If you’ve already declared the variables, chaining assignments is fine and doesn’t create unexpected globals. Example:
function foo() {
var a, b;
// ...
a = b = 0; // both local
}
“JavaScript Patterns, by Stoyan Stefanov (O’Reilly). Copyright 2010 Yahoo!, Inc., 9780596806750.”