用于访问值的语法obj.obj.key和obj [obj] .key有什么区别?

时间:2014-02-08 22:10:05

标签: javascript

似乎在for循环的上下文中,关于对象的语法发生了变化。

为什么console.log()的运行不一样?第一个按预期运行,第二个呈现错误'steve未定义':

var friends = {
    steve: {firstName: "Steve",                    lastName: "Jobs", 
            number: "none"
            }
};

friends.bill = {
    firstName: "Bill", 
    lastName: "Gates", 
    number: "Hidden"
};

console.log(friends.steve.firstName)
console.log(friends[steve].firstName)

通常情况下,我不希望使用格式obj [obj] .key,但看起来在下面的示例中使用for循环,语法obj.obj.key不起作用,但相反obj [ obj] .key确实:

var friends = {
};

friends.steve = {
    firstName: "Steve",
    lastName: "Jobs",
    number: "none",
};

friends.bill = {
    firstName: "Bill",
    lastName: "Gates",
    number: 'Hidden',
};

var search = function (name) {
    for (var person in friends) {
        if (friends[person].firstName === name) { 
            console.log(friends[person])
        }
    }
};

search("Steve")

是什么导致这两种语法在这些上下文中表现不同?

谢谢!

1 个答案:

答案 0 :(得分:3)

friends.steve

是写friends['steve']

的另一种方式

不同
friends[steve]

第一个是字符串'steve',第二个是变量steve,可以是'bob''steve'1或其他任何内容。


示例:

var obj = {steve:1, bob:2};
var steve = 'bob';

console.log(obj.steve);    // 1
console.log(obj['steve']); // also 1
console.log(obj[steve]);   // 2

或等效,

var obj = {steve:1, bob:2};

console.log(obj.steve);    // 1
console.log(obj['steve']); // also 1
console.log(obj['bob']);   // 2