使用逗号分配是否有效?

Sha*_*bus 108 javascript syntax

为什么aaa = 1,2,3工作和设置的值aaa1

为什么不起作用var bbb = 1,2,3

为什么var bbb = (1,2,3)工作和设置的值bbb3

控制台会话示例

p.s*_*w.g 200

这里有很多内容,但基本上,它归结为逗号运算符.

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值.


这段代码:

aaa = 1,2,3
Run Code Online (Sandbox Code Playgroud)

相当于:

aaa = 1;
2;
3;
Run Code Online (Sandbox Code Playgroud)

因此aaa隐式声明并赋值为1.请注意,控制台上的输出是最后一个语句的结果,3.


这段代码:

var bbb = 1,2,3
Run Code Online (Sandbox Code Playgroud)

是语法错误,因为变量声明中的逗号用于在一行中声明多个变量.正如MDN文章指出的那样,

请注意,var语句中的逗号不是逗号运算符,因为它在表达式中不存在.相反,它是var声明中的一个特殊字符,将它们的多个组合成一个.

所以这段代码大致相当于:

var bbb = 1;
var 2;
var 3;
Run Code Online (Sandbox Code Playgroud)

当然,2它不是有效的标识符,所以它在那时失败了.


这段代码:

var bbb = (1,2,3)
Run Code Online (Sandbox Code Playgroud)

与第一个非常相似,除非因为数值包含在括号中,所以首先计算它们.所以这相当于:

1;
2;
var bbb = 3;
Run Code Online (Sandbox Code Playgroud)

  • 甚至更多,`var bbb = 1;`中的`=`与'aaa = 1中的`=`不一样`` - 它们来自语法中的不同产品(Initialiser vs AssignmentExpression),恰巧使用同样的道理. (17认同)
  • 非常好的解释.不完全明确的是,'a = 1,2,3`可以括号为`(a = 1),2,3',其评估为'a = 1; 2; 3`(并返回3,例如`b =(a = 1,2,3)`将3分配给b).相反,`a =(1,2,3)`评估为'1; 2; a = 3`并返回3. (7认同)

Bar*_*mar 9

逗号在Javascript中有多种用途.在表达式中:

a = 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)

它是一个简单地返回其右手参数的运算符.但它也是var声明语法的一部分,它们是:

var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
Run Code Online (Sandbox Code Playgroud)

(这[...]意味着该部分是可选的).您的var声明在逗号后面缺少变量名,因此它不会解析.你可以得到你想要的效果:

var a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

括号强制将逗号视为运算符而不是变量声明之间的分隔符.


Sal*_*n A 7

在您的示例中,逗号用于两个上下文中:

var 声明

var语句的语法是:

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Run Code Online (Sandbox Code Playgroud)

这里,逗号用于分隔变量名称 - 值对.以下操作无效,因为变量名称不能以数字开头(请参阅标识符名称):

var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
Run Code Online (Sandbox Code Playgroud)

逗号运算符

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

aaa = 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)
  • aaa = 1, 2 产量2
    • 请注意aaa = 1首先评估因为=优先级高于,
  • 2, 3 收益率3
var bbb = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
  • 表达(1, 2, 3)产率3,如上所述
  • 变量bbb被赋值3

  • `aaa = 1,2,3` =>逗号运算符用于分隔以下3个语句:`aaa = 1`,`2`和`3`.逗号运算符的结果是最后一个语句3的值.但是,aaa的值被赋值为1,这可以从OP的屏幕截图中清楚地看到.其原因是运算符优先级,逗号运算符具有最低优先级. (2认同)