似乎在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")
是什么导致这两种语法在这些上下文中表现不同?
谢谢!
答案 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