`x = y, z` comma assignment in JavaScript [duplicate]

淺唱寂寞╮ 提交于 2019-11-30 13:45:45

问题


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?


回答1:


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?




回答2:


var syntax allows multiple assignment, so when you see the following, you're declaring multiple variables using one var statement.

var a, b, c;

Note that this syntax is not the comma operator.


The , can be used as the comma operator. It simply evaluates a series of expressions. So when you see the following syntax, you are seeing a series of expressions being evaluated, and the return value of the last one being returned.

x = (y = x, z)

Within the parens, x is assigned to y, then z is evaluated and returned from the () and assigned to x.


I'd suggest that this syntax is unclear and offers little benefit.




回答3:


The comma operand evaluates all of its operands and returns the last one. It makes no difference in this case if we had used

x = (y = x, z);

or

y = x;

x = z;

It's there to take away that line of code.



来源:https://stackoverflow.com/questions/12769922/x-y-z-comma-assignment-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!