В Javascript: почему var a, b = 3 возвращает неопределенное значение, а b = 3 - нет?

В MDN оператор запятой описывается:

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

Но почему

var a, b = 3

вернуть undefinedв то время как выражение

b = 3

вернет 3, не так ли?

2 ответа

Решение

Это:

var a, b = 3;

является VariableStatement. VariableStatement оценка в "нормальном завершении" до empty:

  1. Пусть next будет результатом вычисления VariableDeclarationList.
  2. ReturnIfAbrupt (далее).
  3. Вернуть NormalCompletion(пусто).

Это:

b = 3;

является ExpressionStatement. ExpressionStatement оценивает результат оценочного выражения:

  1. Пусть exprRef будет результатом вычисления Expression.
  2. Вернуть? ПолучитьЗначение (exprRef).
var a, b = 3;

То же самое, что и следующее:

var a;
var b = 3;

Объявление переменной (var Ключевое слово) не является выражением. Запятые в объявлениях переменных больше похожи на запятые в списках аргументов функции. Они ничего не возвращают.

Это правда, что оператор запятой возвращает последний элемент, но я не уверен, есть ли у него какие-либо практические варианты использования (за исключением for инициализация цикла).

> 1, 2, 3
< 3

Страница, на которую вы ссылаетесь, объясняет это довольно хорошо.

Другие вопросы по тегам