В Javascript: почему var a, b = 3 возвращает неопределенное значение, а b = 3 - нет?
В MDN оператор запятой описывается:
Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
Но почему
var a, b = 3
вернуть undefined
в то время как выражение
b = 3
вернет 3, не так ли?
2 ответа
Это:
var a, b = 3;
является VariableStatement. VariableStatement
оценка в "нормальном завершении" до empty
:
- Пусть next будет результатом вычисления VariableDeclarationList.
- ReturnIfAbrupt (далее).
- Вернуть NormalCompletion(пусто).
Это:
b = 3;
является ExpressionStatement. ExpressionStatement
оценивает результат оценочного выражения:
- Пусть exprRef будет результатом вычисления Expression.
- Вернуть? ПолучитьЗначение (exprRef).
var a, b = 3;
То же самое, что и следующее:
var a;
var b = 3;
Объявление переменной (var
Ключевое слово) не является выражением. Запятые в объявлениях переменных больше похожи на запятые в списках аргументов функции. Они ничего не возвращают.
Это правда, что оператор запятой возвращает последний элемент, но я не уверен, есть ли у него какие-либо практические варианты использования (за исключением for
инициализация цикла).
> 1, 2, 3
< 3
Страница, на которую вы ссылаетесь, объясняет это довольно хорошо.