使用for循环访问javascript中的对象属性?

使用for循环访问javascript中的对象属性?,javascript,oop,object,for-loop,Javascript,Oop,Object,For Loop,考虑以下对象: var nyc = { fullName: "New York City", mayor: "Bill de Blasio", population: 8000000, boroughs: 5 }; 当我尝试使用for循环访问每个属性时: for(var key in nyc){ console.log(nyc[key]); } 它返回正确的输出(属性值),但是 此返回值在4行上为“未定义” 为什么会有这种奇怪的行为,因为: console.log(nyc.fullName)

考虑以下对象:

var nyc = {
fullName: "New York City",
mayor: "Bill de Blasio",
population: 8000000,
boroughs: 5
};
当我尝试使用for循环访问每个属性时:

for(var key in nyc){
console.log(nyc[key]);
}
它返回正确的输出(属性值),但是

此返回值在4行上为“未定义”

为什么会有这种奇怪的行为,因为:

console.log(nyc.fullName);
console.log(nyc['fullName']);

给定相同的o/p。

nyc.key
查找名为
key
的属性,变量
key
中名为的属性。第一个示例,
nyc[key]
,是使用变量属性名的正确方法


在JavaScript中,您可以使用点符号和属性名称文字(
obj.foo
)或括号符号和属性名称字符串(
obj[“foo”]
)访问对象属性。在第二种情况下,可以使用任何表达式获取字符串,包括变量查找。(在ES6中,您也可以使用带括号的
Symbol
s符号,但在这里不相关。)

nyc.key
查找名为
key
的属性,变量
key
中包含名称的属性。第一个示例,
nyc[key]
,是使用变量属性名的正确方法


在JavaScript中,您可以使用点符号和属性名称文字(
obj.foo
)或括号符号和属性名称字符串(
obj[“foo”]
)访问对象属性。在第二种情况下,可以使用任何表达式获取字符串,包括变量查找。(在ES6中,您也可以使用带括号的符号
Symbol
s,但在这里并不相关。)

可能重复@Kyll:No,这是为了说明使用其中一个的原因,明确地说“除了显而易见的”可以将变量与其中一个一起使用。我肯定有一个骗局(几十个,可能都有细微的不同),但不是这样。但那里的答案不是真的回答了这个问题吗?我认为我应该为答案而不是问题而被标记为傻瓜。@Kyl:我会说不,他们谈论使用其中一个的原因,而不是根本原因。(特别是被接受/投票赞成的)但这可能是一个判断。不过,我相信有一个很好的原创作品可以指出这一点。如果不是的话,这是我见过的这个问题的最纯粹的版本之一,它可能会成为一个规范的版本。(但必须有一个。)那么,如果需要更具体的东西,我们应该这样做吗?虽然我的标志已经用完了。可能是@Kyll的重复:不,这是在询问使用其中一个的原因,明确地说“除了显而易见的”你可以将变量与其中一个一起使用。我肯定有一个骗局(几十个,可能都有细微的不同),但不是这样。但那里的答案不是真的回答了这个问题吗?我认为我应该为答案而不是问题而被标记为傻瓜。@Kyl:我会说不,他们谈论使用其中一个的原因,而不是根本原因。(特别是被接受/投票赞成的)但这可能是一个判断。不过,我相信有一个很好的原创作品可以指出这一点。如果不是的话,这是我见过的这个问题的最纯粹的版本之一,它可能会成为一个规范的版本。(但必须有一个。)那么,如果需要更具体的东西,我们应该这样做吗?但我已经花掉了我的国旗。
console.log(nyc.fullName);
console.log(nyc['fullName']);