Почему aaa = 1,2,3
работа и установить значение aaa
для 1
?
Почему не var bbb = 1,2,3
работает?
Почему var bbb = (1,2,3)
работа и установить значение bbb
для 3
?
javascript
syntax
Шанкар Кабус
источник
источник
var a1,a2,a3;
просто объявит три локальные переменные.Ответы:
Здесь много чего происходит, но в основном все сводится к оператору запятой .
Этот код:
Эквивалентно:
So
aaa
неявно объявляется, и ему присваивается значение 1. Обратите внимание, что вывод на консоль является результатом последнего оператора 3.Этот код:
Это синтаксическая ошибка, поскольку запятые в объявлениях переменных используются для объявления нескольких переменных в одной строке. Как указывается в статье MDN,
Итак, этот код примерно эквивалентен:
Конечно,
2
это недействительный идентификатор, поэтому в этот момент он не работает.Этот код:
Очень похож на первый, за исключением того, что числовые значения заключены в круглые скобки, они вычисляются первыми. Это примерно эквивалентно:
источник
=
invar bbb = 1;
- это не то же самое,=
что и inaaa = 1;
- они происходят из разных производств (Initialiser vs AssignmentExpression) в грамматике и просто используют один и тот же токен.a = 1, 2, 3
можно заключить в круглые скобки, как,(a = 1), 2, 3
что оценивается какa = 1; 2; 3
(и возвращает 3, напримерb = (a = 1, 2, 3)
, присваивает 3 переменной b). Напротив,a = (1, 2, 3)
оценивается как1; 2; a = 3
и возвращает 3.(1 + 2) * 3
,1 + 2
сначала оценивается, а результат этого выражения подставляется обратно во внешнее выражение для остальной части оценки.Запятая имеет несколько применений в Javascript. В выражении:
это оператор, который просто возвращает свой правый аргумент. Но это также часть синтаксиса
var
объявлений, а именно:(где
[...]
означает, что часть не является обязательной). В вашемvar
объявлении отсутствуют имена переменных после запятых, поэтому он не анализируется. Вы можете получить желаемый эффект:Круглые скобки заставляют рассматривать запятые как операторы, а не как разделители между объявлениями переменных.
источник
В ваших примерах запятая используется в двух контекстах:
var
заявлениеСинтаксис
var
оператора:Здесь запятая используется для разделения пар имя-значение переменной. Следующее не будет работать, потому что имя переменной не может начинаться с цифры (см. Имена идентификаторов ):
Оператор запятой
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда. Следующие выражения работают следующим образом:
aaa = 1, 2
дает 2aaa = 1
оценивается первым, потому что=
имеет более высокий приоритет, чем,
2, 3
дает 3(1, 2, 3)
дает3
как описано вышеbbb
присваивается значение3
источник
aaa = 1, 2, 3
=> Оператор запятой используются для разделения следующих 3 заявления:aaa=1
,2
и3
. Результатом оператора запятой является значение последнего оператора 3. Однако aaa присваивается значение 1, как ясно видно на снимке экрана OP. Причиной этого является приоритет оператора, при этом оператор запятой имеет самый низкий приоритет.В первом случае:
ааа = 1,2,3
запятые служат разделителями выражений. Он выполняет присвоение
aaa
, затем вычисляет2
и отбрасывает его, а затем вычисляет3
и отбрасывает его.Во-вторых:
var
Ключевое слово указывает Javascript компилятору , что следующее , что после того, как,
должно быть другое имя переменной. Он не находит, поэтому умирает и давится.Здесь компилятор сначала оценивает
1
и игнорирует его. Затем он оценивает2
и игнорирует его. Затем он оценивается,3
и он остается в стеке, поэтому он назначаетсяbbb
Хотя использование запятых для разделения выражений не является обычным явлением, иногда это полезно в таких вещах, как
for
внешний вид.источник