JavaScript中访问嵌套在另一个对象内部的对象的属性

3

我试图访问嵌套在对象内部的对象的属性。我的方法是否不正确,我的语法是否有误,还是两者都有问题?我曾经拥有更多的“联系人对象”,但为了缩小这篇文章,我将它们删除了。

var friends = {
    steve:{
        firstName: "Rob",
        lastName: "Petterson",
        number: "100",
        address: ['Thor Drive','Mere','NY','11230']
    }
};

//test notation this works:
//alert(friends.steve.firstName);

function search(name){
    for (var x in friends){
        if(x === name){
               /*alert the firstName of the Person Object inside the friends object
               I thought this alert(friends.x.firstName);
               how do I access an object inside of an object?*/
        }
    }
}  

search('steve');

由于x是一个变量,你需要使用friends[x].firstName。而friends.x.firstname会寻找字面上的键值x - Evan Davis
那很有道理,谢谢! - brooklynsweb
可能是访问/处理嵌套对象、数组或JSON的重复问题。 - Felix Kling
1个回答

6

这可能是

friends.steve.firstName

或者

friends["steve"].firstName

你不需要使用for循环,可以这样做:
function search(name){
    if (friends[name]) alert(friends[name].firstName);
}

一个类似主题的问题:为什么我不能使用点符号表示法?//这个可以工作 function search(name){ if(friends[name]){ alert(friends[name].firstName); }//这个不行 function search(name){ if(friends.name){ alert(friends.name.firstName); }} - brooklynsweb
2
@brooklynsweb - 点符号只能用于在编写代码时已知的常量字符串。它不能用于存储在变量中的字符串。对于存储在变量或参数中的名称,您需要使用obj[varname]符号。 - jfriend00
@brooklynsweb 为了解释jfriend00所写的内容...如果你写friends.name,JavaScript怎么知道你是指一个“叫做(字面上)name”的字段还是一个“名为变量name中所说的任何东西的字段”?方括号表示法让你可以指定:friend[name]是一个“名为变量name中所说的任何东西的字段”,而friend["name"]是一个“叫做(字面上)name”的字段。 - Vedran Šego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接