admin管理员组文章数量:1135199
Why does aaa = 1,2,3
work and set the value of aaa
to 1
?
aaa = 1,2,3;
console.log(aaa);
Why does aaa = 1,2,3
work and set the value of aaa
to 1
?
aaa = 1,2,3;
console.log(aaa);
Why doesn't var bbb = 1,2,3
work?
var bbb = 1,2,3;
console.log(bbb);
Why does var bbb = (1,2,3)
work and set the value of bbb
to 3
?
var bbb = (1,2,3);
console.log(bbb);
Share
Improve this question
edited Oct 18, 2024 at 3:04
Peter Mortensen
31.6k22 gold badges109 silver badges133 bronze badges
asked Mar 31, 2014 at 22:30
Shankar CabusShankar Cabus
9,7827 gold badges36 silver badges43 bronze badges
1
|
4 Answers
Reset to default 200There's a lot going on here, but basically, it comes down to the comma operator.
The comma operator evaluates both of its operands (from left to right) and returns the value of the second operand.
This code:
aaa = 1,2,3
Is equivalent to:
aaa = 1;
2;
3;
So aaa
is implicitly declared and assigned a value of 1. Notice that the output on the console is the result of the last statement, 3.
This code:
var bbb = 1,2,3
Is a syntax error because commas in variable declarations are used to declare multiple variables in a single line. As the MDN article points out,
Note that the comma in the
var
statement is not the comma operator, because it doesn't exist within an expression. Rather, it is a special character invar
statements to combine multiple of them into one.
So this code is roughly equivalent to:
var bbb = 1;
var 2;
var 3;
Of course, 2
is not a valid identifier, so it fails at that point.
This code:
var bbb = (1,2,3)
Is very similar to the first, except because the numeric values are wrapped in a parentheses, they are evaluated first. So this is rougly equivalent to:
1;
2;
var bbb = 3;
Comma has multiple uses in JavaScript. In the expression:
a = 1, 2, 3;
it's an operator that simply returns its right-hand argument. But it's also part of the syntax of var
declarations, which are:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(where [...]
means that part is optional). Your var
declaration is missing the variable names after the commas, so it doesn't parse. You could get the effect you wanted with:
var a = (1, 2, 3);
The parentheses force the commas to be treated as operators rather than delimiters between variable declarations.
In your examples, the comma is used in two contexts:
var
statement
The syntax of var
statement is:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Here, comma is used to separate variable name-value pairs. The following will not work because a variable name cannot start with a digit (see identifier names):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
Comma Operator
The comma operator evaluates both of its operands (from left to right) and returns the value of the second operand. The following expressions work as follows:
aaa = 1, 2, 3;
aaa = 1, 2
yields 2- note that
aaa = 1
is evaluated first because=
has higher priority than,
- note that
2, 3
yields 3
var bbb = (1, 2, 3);
- the expression
(1, 2, 3)
yields3
as described above - The variable
bbb
is assigned the value3
In the first case:
aaa = 1,2,3
the commas serve as expression separators. It performs an assignment to aaa
, then it calculates 2
and discards it, then it calculates 3
and discards it.
In the second:
var bbb = 1,2,3
The var
keyword tells the JavaScript compiler that the next thing after a ,
should be another variable name. It isn't finding one, so it dies and gags.
var bbb = (1,2,3)
Here, the compiler first evaluates 1
and ignores it. Then it evaluates 2
and ignores it. Then it evaluates 3
and that is left on the stack so it is assigned to bbb
While using commas to separate expressions isn't common, it is sometimes useful in things like for
loops.
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
本文标签: syntaxDoes assignment with a comma work in JavaScriptStack Overflow
版权声明:本文标题:syntax - Does assignment with a comma work in JavaScript? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736920041a1956431.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
var a1,a2,a3;
will simply declare three local variables. – Jared Farrish Commented Mar 31, 2014 at 22:35