var a, b, c = {} - PullRequest
       39

var a, b, c = {}

1 голос
/ 04 августа 2011

Я думал, что синтаксис:

var a, b, c = {};

будет означать, что три переменные являются отдельными, а не ссылками на один и тот же {}.

Это потому, что {} является объектом, и это стандартное поведение?

Итак, если я сделаю:

var a, b, c = 0;

три действительно будут отдельными, а не ссылками?

Спасибо, Уэсли

Ответы [ 6 ]

11 голосов
/ 04 августа 2011

Они не должны быть одинаковыми, нет.Только c будет присвоено значение.

a и b будут просто объявлены, но ни к чему не инициализированы (они будут неопределенными)c будет, как единственный из них, инициализирован как {}

Возможно, это будет понятнее, если записать в несколько строк:

4 голосов
/ 04 августа 2011
var a, b, c = {};

Это объявит 3 переменные (a, b, c), но определит только 1 переменную (c).

var a, b, c = 0;

Это объявит 3 переменные (a, b, c), но определиттолько 1 переменная (с).

1 голос
/ 04 августа 2011

В примерах вы определяете только последний элемент

a и b не определены

0 голосов
/ 04 августа 2011

Да, три будут отдельными.

Оператор запятой оценивает левый операнд, затем вычисляет правый операнд, а затем возвращает значение правого операнда.

Это хороший способ объявить несколько переменных в строке, если вы просто полагаетесь на оценку операндов и ничего не делаете с возвращаемым значением.

var i = 0, j = 1, k = 2; в основном эквивалентно var i = 0; var j = 1; var k = 2

Другое использование для этого - сжать несколько операций в одну строку без использования ;, как в цикле for с несколькими переменными цикла:

for(var x=0,y=5; x < y; x++,y--)

Обратите внимание, как x ++ и y-- могут выполняться в одной строке.

0 голосов
/ 04 августа 2011

Использование комы для разделения переменных позволяет более компактно определить несколько переменных в одной и той же области видимости.В вашем примере, однако, только c = {} и a и b будут undefined.Вы можете использовать аналогичную конструкцию, чтобы назначить что-то вроде

var a = {first: 'foo'}, 
    b = {second: 'bar'}, 
    c = {third: 'foobar'};

, которое будет равно

var a = {first: 'foo'}, b = {second: 'bar'}, c = {third: 'foobar'};

, а также

var a = {first: 'foo'};
var b = {second: 'bar'};
var c = {third: 'foobar'};

.к их соответствующему объекту.Использование комы в основном только визуальный аспект.

0 голосов
/ 04 августа 2011

var a, b, c = {}; определяет только последнюю переменную, а именно c. это похоже на синтаксис var a = {}, b = [], c = 0;

это просто короткая рука для объявления нескольких переменных.

...