var и оператор запятая

120
19 октября 2019, 01:20

Почему var i = 15,4; генерирует ошибку? Ведь сначала должно присваивание выполнится, а затем оператор , вернет 4. Или как это работает? Может , не является оператором в данном контексте? Объясните пожалуйста.

Answer 1

Обратимся к спецификации. Синтаксис использования var, следующий:

VariableStatement[Yield, Await]:
    var VariableDeclarationList[+In, ?Yield, ?Await];
VariableDeclarationList[In, Yield, Await]:
    VariableDeclaration[?In, ?Yield, ?Await]
    VariableDeclarationList[?In, ?Yield, ?Await] , VariableDeclaration[?In, ?Yield, ?Await]
VariableDeclaration[In, Yield, Await]:
    BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await] opt
    BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]

Отсюда видно, что в данном случае запятой разделяются именно BindingIdentifier.

Число 4 не является идентификатором, поэтому и показывается синтаксическая ошибка.

Answer 2

var объявляет переменную и факультативно присваивает ей значение. Декларация это инструкция (statement), а не выражение (expression), и по синтаксису после запятой в объявлении возможны только другие объявления переменных (факультативно с присваиванием). Вот так работает:

var i; 
i = 15,4; // Присваивает 15, возвращает 4. 
console.log(i);

Теперь сначала происходит присваивание, потом возврат второго операнда.

READ ALSO
Создание вложенных списков в React

Создание вложенных списков в React

Мне необходимо создать список в виде древовидной структурыЧто-то вроде:

100
Вывод строки по одному символу JavaScript [закрыт]

Вывод строки по одному символу JavaScript [закрыт]

подскажите, есть строка, хочу вывести ее в хтмл по буквенно, одна за одной с каким-то интервалом, разбиваю строку с помощью split(), и как теперь...

105