Подтвердить что ты не робот

`x = y, z` назначение запятой в JavaScript

Возможный дубликат:
Синтаксис 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 это означало распаковку кортежа (или упаковку в этом случае). Здесь один и тот же случай?

4b9b3361

Ответ 1

Это оператор запятой.

Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда.

Полученное значение при оценке a, b, c,..., n всегда будет значение самого правого выражения, однако все выражения в цепь по-прежнему оценивается (слева направо).


Итак, в вашем случае назначения будут по-прежнему оцениваться, но конечное значение будет bassoon.

Результат:

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

Дополнительная информация: Javascript "tuple" обозначение: какова его точка?

Ответ 2

Оператор запятой оценивает все свои операнды и возвращает последний. В этом случае не имеет значения, если мы использовали

x = (y = x, z);

или

y = x;

x = z;

Это там, чтобы отнять эту строку кода.

Ответ 3

var синтаксис допускает множественное присвоение, поэтому, когда вы видите следующее, вы объявляете несколько переменных, используя один оператор var.

var a, b, c;

Обратите внимание, что этот синтаксис не является оператором запятой.


, может использоваться как оператор запятая. Он просто оценивает ряд выражений. Поэтому, когда вы видите следующий синтаксис, вы видите серию выражаемых выражений и возвращаемое значение возвращаемого последнего.

x = (y = x, z)

Внутри parens x присваивается y, тогда z оценивается и возвращается из () и назначается x.


Я бы предположил, что этот синтаксис неясен и не приносит никакой пользы.