2016-08-27 132 views
0

我有一个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.name); 
     func2(p.age); 
    } 
} 

然而,p.name显示为“未定义“在调试器中,其他键也是如此。我想知道是否JavaScript允许用户将子对象分配给像Python这样的新变量。

回答

1

我想你错过了那里的东西。看:

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

这应该工作。

p只存在为obj一个属性,因此,即使里面for-in循环,你还是要访问pobj(自环)的属性。

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

有时您需要方括号表示法,因为您想将它传递给一些变量,这是您在for-in循环内需要的。

我希望这很清楚。如果没有,你可以看到它在这个工作JSBin

1

你的嵌套对象是严格格式(具有名称,所有嵌套元素的年龄)。
此外,检查它的原因是什么hasOwnProperty
你用键迭代一个对象,不知道它有iterator key

为什么不只是简单地迭代对象?

var obj = { 
 
    p1: { 
 
     name: "name1", 
 
     age: "age1" 
 
    }, 
 
    p2: { 
 
     name: "name2", 
 
     age: "age2" 
 
    } 
 
}; 
 

 
function func1(value) { 
 
    console.log('Name:', value); 
 
} 
 

 
function func2(value) { 
 
    console.log('Age:', value); 
 
} 
 

 
for(var i in obj) { 
 
    if(typeof obj[i] != 'object') 
 
    continue; 
 
    console.log('\nOutputing:', i); 
 
    func1(obj[i].name); 
 
    func2(obj[i].age); 
 
}

+0

它的工作原理。你能解释为什么'obj [i] .name'不是'obj.i.name'? –

+0

由于它的语法结构。 – num8er

+1

当你没有[]时,它不能将我作为变量来选择。 – num8er

相关问题