用逗号分配工作吗?
为什么aaa = 1,2,3
工作并将aaa
的值设置为1
?
为什么不var bbb = 1,2,3
工作?
为什么var bbb = (1,2,3)
工作并将bbb
的值设置为3
?
这里有很多事情要做,但基本上,这要归功于逗号运算符 。
逗号运算符评估两个操作数(从左到右)并返回第二个操作数的值。
此代码:
aaa = 1,2,3
相当于:
aaa = 1; 2; 3;
因此, aaa
被隐式声明并赋值为1.注意,控制台上的输出是最后一条语句3的结果。
此代码:
var bbb = 1,2,3
是语法错误,因为variables声明中的逗号用于在一行中声明多个variables。 正如MDN文章指出的那样,
请注意,
var
语句中的逗号不是逗号运算符,因为它不存在于expression式中。 相反,var
语句中的一个特殊字符可以将多个字符组合成一个字符。
所以这个代码大致相当于:
var bbb = 1; var 2; var 3;
当然, 2
是不是一个有效的标识符,所以它在这一点上失败。
此代码:
var bbb = (1,2,3)
与第一个非常相似,除了因为数值被括在圆括号中,他们首先被评估。 所以这是等同于:
1; 2; var bbb = 3;
逗号在Javascript中有多种用法。 在expression式中:
a = 1, 2, 3;
这是一个运营商,只是简单地返回它的右边的论点。 但它也是var
声明的一部分,它们是:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(这意味着该部分是可选的)。 您的var
声明在逗号后缺lessvariables名,所以不会parsing。 你可以得到你想要的效果:
var a = (1, 2, 3);
括号将逗号视为操作符而不是variables声明之间的分隔符。
在你的例子中,逗号在两个上下文中使用:
var
语句
var
语句的语法是:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
这里用逗号分隔variables名 – 值对。 以下内容不起作用,因为variables名不能以数字开头(请参见标识符名称 ):
var bbb = 1, 2, 3; // SyntaxError: Unexpected number
逗号运算符
逗号运算符评估两个操作数(从左到右)并返回第二个操作数的值。 以下expression式的工作如下:
aaa = 1, 2, 3;
-
aaa = 1, 2
得到2- 请注意,
aaa = 1
是首先评估的,因为=
具有较高的优先级,
- 请注意,
-
2, 3
产量3
var bbb = (1, 2, 3);
- 如上所述
(1, 2, 3)
expression式(1, 2, 3)
产生3
- variables
bbb
被赋值为3
在第一种情况下:
aaa = 1,2,3
逗号作为expression分隔符。 它执行aaa
分配,然后计算2
并丢弃它,然后计算3
并丢弃它。
在第二:
var bbb = 1,2,3
var
关键字告诉Javascript编译器,a之后的下一个应该是另一个variables名。 它没有find,所以它死亡和嘲笑。
var bbb = (1,2,3)
在这里,编译器首先评估1
并忽略它。 然后评估2
并忽略它。 然后评估3
,这是留在堆栈,所以它被分配到bbb
虽然使用逗号分隔expression式并不常见,但有时在外观方面有用。
for (i = 0, l = 10; i < l; i++) { console.log(i); }