为什么这个变量不是一个对象?

时间:2015-07-15 07:56:51

标签: javascript

我有以下对象。

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作为对象,但我仍然可以访问他的属性?

2 个答案:

答案 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之间的区别。