如何在javascript中将子对象分配给变量?

如何在javascript中将子对象分配给变量?,javascript,Javascript,我有一个javascript对象,看起来像 var obj = { p1: { name: "name1", age: "age1" } p2: { name: "name2", age: "age2" } } 我希望能够以迭代方式访问姓名和年龄,意思如下: for (var p in obj) { if (obj.hasOwnProperty(p)) { func1(p.n

我有一个javascript对象,看起来像

var obj = {
    p1: {
        name: "name1",
        age: "age1"
    }
    p2: {
        name: "name2",
        age: "age2"
    }
}
我希望能够以迭代方式访问姓名和年龄,意思如下:

for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
        func1(p.name);
        func2(p.age);
    }
}

但是,p.name在调试器中显示为“undefined”,p的其他键也显示为“undefined”。我想知道javascript是否允许用户将子对象分配给Python中的新变量。

我认为您缺少了一些东西。看:

for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
        func1(obj[p].name);
        func2(obj[p].age);
    }
}
这应该行得通

p
仅作为
obj
的属性存在,因此,即使在
for in
循环中,也必须作为
obj
的属性(从循环)访问
p

如果您正在学习javascript,这可能并不明显,但实际上有两种访问对象属性的方法:点表示法和方括号表示法。使用您的示例,
obj.p1.name===obj['p1']['name]

有时,您需要方括号表示法,因为您希望向它传递一些变量,这就是您在
for in
循环中需要的变量


我希望这是清楚的。如果没有,你可以看到它正在处理这个问题,我想你遗漏了一些东西。看:

for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
        func1(obj[p].name);
        func2(obj[p].age);
    }
}
这应该行得通

p
仅作为
obj
的属性存在,因此,即使在
for in
循环中,也必须作为
obj
的属性(从循环)访问
p

如果您正在学习javascript,这可能并不明显,但实际上有两种访问对象属性的方法:点表示法和方括号表示法。使用您的示例,
obj.p1.name===obj['p1']['name]

有时,您需要方括号表示法,因为您希望向它传递一些变量,这就是您在
for in
循环中需要的变量


我希望这是清楚的。如果没有,您可以看到它正在处理这个

您的嵌套对象是严格格式化的(在所有嵌套元素中都有名称、年龄)。
另外,检查它是否有自己的属性的原因是什么
您按键迭代对象,但不知道它有
迭代器键


为什么不直接迭代对象呢

var obj={
p1:{
名称:“名称1”,
年龄:“1岁”
},
p2:{
名称:“名称2”,
年龄:“2岁”
}
};
函数func1(值){
console.log('Name:',value);
}
函数func2(值){
console.log('Age:',值);
}
用于(obj中的var i){
if(对象类型[i]!=“对象”)
继续;
console.log('\nOutputing:',i);
func1(obj[i].名称);
func2(obj[i].年龄);

}
嵌套对象的格式是严格的(在所有嵌套元素中都有名称、年龄)。
另外,检查它是否有自己的属性的原因是什么
您按键迭代对象,但不知道它有
迭代器键


为什么不直接迭代对象呢

var obj={
p1:{
名称:“名称1”,
年龄:“1岁”
},
p2:{
名称:“名称2”,
年龄:“2岁”
}
};
函数func1(值){
console.log('Name:',value);
}
函数func2(值){
console.log('Age:',值);
}
用于(obj中的var i){
if(对象类型[i]!=“对象”)
继续;
console.log('\nOutputing:',i);
func1(obj[i].名称);
func2(obj[i].年龄);

}
它可以工作。请您解释一下为什么
obj[i].name
not
obj.i.name
?因为它的语法结构。当您不使用[]时,它不能将i作为要选择的关键变量。在for循环中,i是对象的关键(字符串),当您使用obj.i.name时,它表示为变量。js解释器认为您想要获取对象的i元素。但实际上,你们想得到的不是我,而是保存在我里面的钥匙。就好像我是='p1';所以它的意思是:obj[i].name==obj['p1'].name==obj.p1.nameP.s。阅读手册:它是有效的。请您解释一下为什么
obj[i].name
not
obj.i.name
?因为它的语法结构。当您不使用[]时,它不能将i作为要选择的关键变量。在for循环中,i是对象的关键(字符串),当您使用obj.i.name时,它表示为变量。js解释器认为您想要获取对象的i元素。但实际上,你们想得到的不是我,而是保存在我里面的钥匙。就好像我是='p1';所以它的意思是:obj[i].name==obj['p1'].name==obj.p1.nameP.s。阅读手册: