`x = y, z` comma assignment in JavaScript

Yatharth Agarwal picture Yatharth Agarwal · Oct 7, 2012 · Viewed 8.6k times · Source

Possible Duplicate:
Javascript syntax: what comma means?

I came across the code while reading this article (do a Ctrl+F search for 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;
}

What does the x = (y = x, z) construct mean? Or more specifically, what does the y = x, z mean? I'm calling it comma assignment because it looks like assignment and has a comma.

In Python, it meant tuple unpacking (or packing in this case). Is it the same case here?

Answer

mbinette picture mbinette · Oct 7, 2012

This is the comma operator.

The comma operator evaluates both of its operands (from left to right) and returns the value of the second operand.

The resultant value when a,b,c,...,n is evaluated will always be the value of the rightmost expression, however all expressions in the chain are still evaluated (from left to right).


So in your case, the assignations would still be evaluated, but the final value would be bassoon.

Result:

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

More information: Javascript "tuple" notation: what is its point?