2015-07-15 5 views
-1

У меня есть следующий объект.Почему эта переменная не является объектом?

fooBars = { 
    foo: { 
     propA: 1, 
     propB: 2 
    }, 
    bar: { 
     propA: 3, 
     propB: 4 
    } 
}; 

Мне нужна петля, хотя она и сравнить свойства каждого из под-объектов с другими переменными. Я хочу проверить, имеет ли объект свойство, но он не работает. Я пытался использовать некоторые console.log, чтобы понять и получить что-то вроде:

for (fooBar in fooBars) { 
    if (fooBars.hasOwnProperty(fooBar)) { 
     console.log(fooBar);       //Display 'foo' then 'bar' 
     console.log(fooBar.hasOwnProperty('propA')); //Display 'false' 
     console.log(fooBar.propA);     //Display undefined 
    } 
} 

JSFiddle

Что случилось с моим кодом? Почему я не получаю fooBar как объект, но я все еще могу получить доступ к его свойствам?

+0

'foodBar in ...'? Опечатка? – Cerbrus

+1

'foodBar'? 'FooBar'? 'FooBars'? 'FoobBars'? Прими решение. – Oka

+0

Если все опечатки фиксированы, третья строка записывает 'undefined'. См. Http://jsfiddle.net/cv8mdkj7/. Проблема, вероятно, связана с опечатками. – bgoldst

ответ

1

Потому что fooBar не объект, это просто (string) имя (одно) свойство внутри fooBars объект. Когда вы получили string значение, которое представляет имя собственности в какой-либо объект, вы можете получить доступ к этому значению свойства с (в вашем случае) fooBars[fooBar]

Try

console.log(fooBars[fooBar].hasOwnProperty('propA')); //Display 'true' 
console.log(fooBars[fooBar].propA);     //Display 1 then 3 

Если вы не верите мне, просто введите console.log(typeof(fooBar)); и вас wee видят, что тип fooBar действительно string :)

+0

Вы правы, это было беспорядок с моим именем объекта, поэтому я получил свойства. Я исправил это спасибо! – Alex

+0

['typeof'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof) не является функцией, это оператор. – Oka

0

Я думаю, что вы должны исправить свой код правильно. Что такое foobBars, foodBar и FooBars? Они смущены.

Однако в этом заявлении "для (foodBar в FooBars)"

'foodBar' представляет собой имя переменной. Не точная переменная сама. Это разница между java и js.

Смежные вопросы