JavaScript中的`x = y,z`逗号分配

时间:2012-10-07 15:03:28

标签: javascript variable-assignment assignment-operator assign iterable-unpacking

  

可能重复:
  Javascript syntax: what comma means?

我在阅读this article时遇到了代码(执行 Ctrl + F 搜索Andre Breton):

//function returning array of `umbrella` fibonacci numbers
function Colette(umbrella) {
  var staircase = 0, galleons = 0, brigantines = 1, armada = [galleons, brigantines], bassoon;
  Array.prototype.embrace = [].push;

  while(2 + staircase++ < umbrella) {
    bassoon = galleons + brigantines;
    armada.embrace(brigantines = (galleons = brigantines, bassoon));
  }

  return armada;
}

x = (y = x, z)构造意味着什么?或者更具体地说,y = x, z是什么意思?我称它为逗号赋值,因为它看起来像赋值并且有逗号。

In Python,它意味着元组解包(或在这种情况下打包)。这是同样的情况吗?

3 个答案:

答案 0 :(得分:19)

这是逗号运算符。

  

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

     

评估a,b,c,...,n时的结果值将始终为   最右边的表达式的值,但是所有表达式都在   仍然评估链(从左到右)。


因此,在您的情况下,仍将评估分配,但最终值将为bassoon

结果:

galleons = brigantines
brigantines = bassoon
armada.embrace(basson)

更多信息:Javascript "tuple" notation: what is its point?

答案 1 :(得分:8)

var语法允许多个赋值,因此当您看到以下内容时,您将使用一个var语句声明多个变量。

var a, b, c;

请注意,此语法 逗号运算符


,可以用作comma operator。它只是评估一系列表达式。因此,当您看到以下语法时,您将看到正在评估的一系列表达式,以及返回的最后一个表达式的返回值。

x = (y = x, z)

在parens中,x被分配到y,然后z被评估并从()返回并分配给x


我建议这种语法不清楚,效果不大。

答案 2 :(得分:8)

逗号操作数计算其所有操作数并返回最后一个操作数。如果我们使用

,这种情况没有区别
x = (y = x, z);

y = x;

x = z;

它可以带走那行代码。