22

可能重复:
Javascript 语法:逗号是什么意思?

我在阅读本文时遇到了代码(执行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意思?我称它为逗号赋值,因为它看起来像赋值并且有一个逗号。

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

4

3 回答 3

23

这是逗号运算符。

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

计算 a,b,c,...,n 时的结果值将始终是最右边表达式的值,但是链中的所有表达式仍会被计算(从左到右)。


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

结果:

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

更多信息:Javascript“元组”表示法:它的意义何在?

于 2012-10-07T15:06:00.567 回答
9

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

var a, b, c;

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


,可以用作逗号运算符。它只是评估一系列表达式。因此,当您看到以下语法时,您会看到一系列表达式正在被计算,并且最后一个表达式的返回值被返回。

x = (y = x, z)

在括号内,x分配给y,然后z从 评估并返回()并分配给x


我建议这种语法不清楚并且没有什么好处。

于 2012-10-07T15:07:07.657 回答
9

逗号操作数计算其所有操作数并返回最后一个。在这种情况下,如果我们使用

x = (y = x, z);

或者

y = x;

x = z;

它可以带走那行代码。

于 2012-10-07T15:07:48.310 回答