使用逗号分配是否有效?

时间:2014-03-31 22:30:29

标签: javascript syntax

为什么aaa = 1,2,3有效并将aaa的值设为1

为什么var bbb = 1,2,3无效?

为什么var bbb = (1,2,3)有效并将bbb的值设为3

Example console session

4 个答案:

答案 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

Comma Operator

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。以下表达式的工作方式如下:

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);
}