2015-09-29 4 views
0

Может ли кто-нибудь объяснить мне, почему foo.bar не определен? Как я понимаю, он должен был напечатать 3. Пожалуйста, поправьте меня, если я ошибаюсь.Что происходит, когда мы делаем повторное объявление объекта в Javascript?

Вот код.

var bar = 1, 
    foo = {}; 

    foo: { 
     bar: 2; 
     baz: ++bar; 
    }; 

    foo.bar; //undefined 
    foo.baz; //undefined 

    bar; //2 

Thanks in Advance;

+0

Вместо 'Foo: {}' 'типа Foo = {}' – xxxmatko

ответ

9

У вас есть опечатка foo = { не foo: {. Также свойства должны отделить запятыми , не точкой с запятой:

var bar = 1, 
 
    foo = {}; 
 

 
foo = { 
 
    bar: 2, 
 
    baz: ++bar 
 
}; 
 

 
console.log(foo.bar); //2 
 
console.log(foo.baz); //2 
 
console.log(bar); //2

Кроме того, пожалуйста, посмотрите Object initializer

+0

почему ++ бар не увеличивающийся до 3 ?? – Parashuram

+0

Потому что '1 + 1 = 2'. Переменная 'bar' не имеет никакого отношения к' foo.bar' – epascarello

+0

Поскольку вы инициализировали 'var bar = 1', поэтому' ++ bar', давая вам 1 + 1 = 2'. В то время как 'bar' и' foo.bar' отличаются. – Manwal

0

Потому что ваш синтаксис является неправильным. Он должен быть = оператор присваивания, когда переинициализировать переменная javascript:

var bar = 1, 
foo = {}; 

foo = { 
    bar: 2, 
    baz: ++bar, 
}; 

foo.bar; //2 
foo.baz; //2 

bar; //2 

DEMO

4

Вы не foo повторного объявления. Вы используете label.

Вы должны

foo = { 
    bar: 2, 
    baz: ++bar 
}; 
Смежные вопросы