Почему aaa = 1,2,3 работает и устанавливает значение aaa на 1?
Почему не работает var bbb = 1,2,3?
Почему var bbb = (1,2,3) работает и устанавливает значение bbb на 3?

Почему aaa = 1,2,3 работает и устанавливает значение aaa на 1?
Почему не работает var bbb = 1,2,3?
Почему var bbb = (1,2,3) работает и устанавливает значение bbb на 3?

Здесь многое происходит, но в основном это сводится к запятой.
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда.
Этот код:
aaa = 1,2,3
Является эквивалентным:
aaa = 1;
2;
3;
Итак, aaa объявляется неявно и присваивается значение 1. Обратите внимание, что вывод на консоли является результатом последнего оператора, 3.
Этот код:
var bbb = 1,2,3
Является синтаксической ошибкой, потому что запятые в объявлениях переменных используются для объявления нескольких переменных в одной строке. Как указывает статья MDN,
Обратите внимание, что запятая в выражении
varне операторе запятой, потому что она не существует в выражении. Скорее, это специальный символ в операторахvarдля объединения нескольких из них в один.
Итак, этот код примерно эквивалентен:
var bbb = 1;
var 2;
var 3;
Конечно, 2 не является допустимым идентификатором, поэтому он терпит неудачу в этой точке.
Этот код:
var bbb = (1,2,3)
Очень похож на первый, за исключением того, что числовые значения обернуты в круглые скобки, они сначала оцениваются. Так что это равносильно:
1;
2;
var bbb = 3;
Запятая имеет несколько применений в Javascript. В выражении:
a = 1, 2, 3;
это оператор, который просто возвращает свой правый аргумент. Но это также часть синтаксиса объявлений var, которые:
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(где [...] означает, что эта часть является необязательной). В объявлении var отсутствуют имена переменных после запятых, поэтому он не анализирует. Вы можете получить необходимый эффект:
var a = (1, 2, 3);
Скобки заставляют запятые обрабатываться как операторы, а не разделители между объявлениями переменных.
В ваших примерах запятая используется в двух контекстах:
var statementСинтаксис оператора var:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Здесь запятая используется для разделения пар имя-значение переменной. Следующие действия не будут работать, поскольку имя переменной не может начинаться с цифры (см. имена идентификаторов):
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда. Следующие выражения работают следующим образом:
aaa = 1, 2, 3;
aaa = 1, 2 дает 2
aaa = 1 оценивается первым, потому что = имеет более высокий приоритет, чем ,2, 3 дает 3var bbb = (1, 2, 3);
(1, 2, 3) дает 3, как описано вышеbbb присваивается значение 3В первом случае:
aaa = 1,2,3
запятые служат разделителями выражений. Он выполняет назначение aaa, затем вычисляет 2 и отбрасывает его, затем вычисляет 3 и отбрасывает его.
Во втором:
var bbb = 1,2,3
Ключевое слово var сообщает компилятору Javascript, что следующая вещь после , должна быть другим именем переменной. Он не находит, поэтому он умирает и затягивается.
var bbb = (1,2,3)
Здесь компилятор сначала оценивает 1 и игнорирует его. Затем он оценивает 2 и игнорирует его. Затем он оценивает 3 и остается в стеке, поэтому ему присваивается bbb
В то время как использование запятых для разделения выражений не является обычным явлением, оно иногда полезно в таких вещах, как for.
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}