考虑以下对象:
var nyc = {
fullName: "New York City",
mayor: "Bill de Blasio",
population: 8000000,
boroughs: 5
};
当我尝试使用for循环访问每个属性时:
for(var key in nyc){
console.log(nyc[key]);
}
它返回正确的输出(属性值),但是......
for(var key in nyc){
console.log(nyc.key);
}
此返回"未定义" 4行
为什么奇怪的行为,因为两者:
console.log(nyc.fullName);
console.log(nyc['fullName']);
给予相同的o / p。
答案 0 :(得分:4)
nyc.key
查找名称为key
,不属性的属性,其名称在变量key
中。您的第一个示例nyc[key]
是使用变量中的属性名称的正确方法。
在JavaScript中,您可以使用点表示法和属性名称 literal (obj.foo
)或括号表示法和属性名称 string 访问对象属性( obj["foo"]
)。在第二种情况下,您可以使用任何表达式来获取字符串,包括变量查找。 (在ES6中,您也可以使用带括号表示法的Symbol
,但这里不相关。)