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