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