为什么aaa = 1,2,3
有效并将aaa
的值设为1
?
为什么var bbb = 1,2,3
无效?
为什么var bbb = (1,2,3)
有效并将bbb
的值设为3
?
答案 0 :(得分:200)
这里有很多内容,但基本上,它归结为comma operator。
逗号运算符计算它的两个操作数(从左到右)并返回第二个操作数的值。
此代码:
aaa = 1,2,3
相当于:
aaa = 1;
2;
3;
因此aaa
被隐式声明并赋值为1.请注意,控制台上的输出是最后一个语句的结果,3。
此代码:
var bbb = 1,2,3
是语法错误,因为变量声明中的逗号用于在一行中声明多个变量。正如MDN文章指出的那样,
请注意,
var
语句中的逗号是 不 逗号运算符,因为它在表达式中不存在。相反,它是var
语句中的一个特殊字符,可将它们的多个组合成一个。
所以这段代码大致相当于:
var bbb = 1;
var 2;
var 3;
当然,2
不是有效的标识符,所以它在那时失败了。
此代码:
var bbb = (1,2,3)
与第一个非常相似,除非因为数值包含在括号中,所以首先评估它们。所以这相当于:
1;
2;
var bbb = 3;
答案 1 :(得分:9)
逗号在Javascript中有多种用途。在表达式中:
a = 1, 2, 3;
它是一个简单地返回其右手参数的运算符。但它也是var
声明语法的一部分,它们是:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(其中[...]
表示该部分是可选的)。您的var
声明在逗号后面缺少变量名称,因此它不会解析。你可以得到你想要的效果:
var a = (1, 2, 3);
括号强制逗号被视为运算符而不是变量声明之间的分隔符。
答案 2 :(得分:7)
在您的示例中,逗号用于两个上下文:
var
statement var
语句的语法是:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
这里,逗号用于分隔变量名称 - 值对。以下操作无效,因为变量名称不能以数字开头(请参阅identifier names):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。以下表达式的工作方式如下:
aaa = 1, 2, 3;
aaa = 1, 2
得2
aaa = 1
,因为=
的优先级高于,
2, 3
收益3 var bbb = (1, 2, 3);
(1, 2, 3)
如上所述产生3
bbb
的值为3
答案 3 :(得分:1)
在第一种情况下:
aaa = 1,2,3
逗号用作表达式分隔符。它执行aaa
的分配,然后计算2
并丢弃它,然后计算3
并丢弃它。
在第二个:
var bbb = 1,2,3
var
关键字告诉Javascript编译器,
之后的下一个事情应该是另一个变量名。它没有找到,所以它就死了,并且嘎嘎作响。
var bbb = (1,2,3)
这里,编译器首先评估1
并忽略它。然后它评估2
并忽略它。然后它评估3
并将其保留在堆栈中,以便将其分配给bbb
虽然使用逗号分隔表达式并不常见,但它有时在for
看起来很有用。
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}