Это не оператор запятая. Запятая является частью синтаксиса для ключевого слова var
. Ключевое слово var
указано, чтобы взять список переменных, разделенных запятыми.
Эта функция называется VariableDeclarationList
в спецификации: http://www.ecma-international.org/ecma-262/7.0/index.html#sec-variable-statement
Синтаксис var
ключевое слово задается как:
Syntax
VariableStatement[Yield]:
var VariableDeclarationList[In, ?Yield];
VariableDeclarationList[In, Yield]:
VariableDeclaration[?In, ?Yield]
VariableDeclarationList[?In, ?Yield], VariableDeclaration[?In, ?Yield]
VariableDeclaration[In, Yield]:
BindingIdentifier[?Yield] Initializer[?In, ?Yield]opt
BindingPattern[?Yield] Initializer[?In, ?Yield]
Если вы не знакомы с BNF или RBNF нотации. Спецификация выше означает:
ВыраженияПрисваивания определяется как:
- Строка
var
с последующим СпискаОбъявленияПеременных
СпискаОбъявленияПеременных определяется либо как:
- ОбъявленияПеременной или
- СпискаОбъявленияПеременный, ОбъявлениеПеременная
- Примечания: это рекурсивное определение. В основном он определяет бесконечный список VariableDeclaration, VariableDeclaration, VariableDeclaration ...
ОбъявленияПеременный определяются как
- BindingIdentifier с последующим дополнительным инициализатором или
- BindingPattern с последующим инициализатором
- Примечание: это определение BindingPattern для нового ES6 назначение деструктурирования ([a, b, c] = ...)
Определения BindingIdentifier
, BindingPattern
и Initializer
указаны в другом месте в спецификации.
Определение BindingIdentifier
- это в основном переменное имя. Поэтому действительны BindingIdentifiers
такие вещи, как hello
или x
или y2
, но не for
(потому что это ключевое слово) или 1k
(потому что он начинается с числа).
В настоящее время я проигнорирую определение BindingPattern
, потому что не обязательно понимать определение списка переменных.
Определение Initializer
- это символ =
, за которым следует выражение. В основном =
, за которым следует любой код javascript.
Итак, VariableDeclaration
(НЕ var
ключевое слово, только одна часть его) определяется просто как:
anyVariableName = anything
или
anyVariableName // remember, Initializer is optional
И var
ключевое слово определяется либо как:
var VariableDeclaration
или
var VariableDeclaration, VariableDeclaration, VariableDeclaration ...
So. Допустимые примеры синтаксиса в var
ключевого слова включают
var x;
var x = 12;
var x,
y = "hello",
z;
var x = 0,
y,
z=100;
и т.д.
Когда мы включаем BindingPattern
определение, то действительные примеры синтаксиса в var
ключевых слов также включают в себя:
var x=10,
[a,b,c] = [100,200,300],
i,
j;
var {x,y,z} = {x:10,y:20,z:30},
a = 2,
b,
c,
[i,j,k]=["hello","cruel","world"];
Дополнительные примечания :
Обратите внимание, что VariableDeclaration
также может произойти без ключевого слова var
.Например:
a = 40; // if this is the first time a is defined then it is
// automatically created as a global variable
В этом случае, так как нет var
ключевого слова, любой запятая, что, кажется, не будет частью синтаксиса var
. Это означает, что без var
ключевого слова запятая запятая оператор:
a = 10, b = 50; // comma operator
Пожалуйста, не меняйте свой вопрос! – Qwertiy
Особенно, когда публикуются некоторые ответы. – Qwertiy