我有以下对象。
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
}
}
我的代码出了什么问题?为什么我没有fooBar
作为对象,但我仍然可以访问他的属性?
答案 0 :(得分:1)
因为fooBar
不是对象,所以string
对象中的(一个)属性只是(fooBars
)的名称。当您获得表示某个对象中属性名称的string
值时,您可以使用(在您的情况下)fooBars[fooBar]
尝试
console.log(fooBars[fooBar].hasOwnProperty('propA')); //Display 'true'
console.log(fooBars[fooBar].propA); //Display 1 then 3
如果您不相信我,只需输入console.log(typeof(fooBar));
即可看到fooBar
的类型确实是string
:)
答案 1 :(得分:0)
我认为您应该正确修复代码。什么是foobBars,foodBar和FooBars?那些很困惑。
然而,在本声明中“for(foodBar in FooBars)”
'foodBar'代表变量的名称。不是确切的变量本身。这是java和js之间的区别。