考虑以下对象:
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。
最佳答案
nyc.key
在变量key
中查找名称为key
的属性,而不是名称为该属性的属性。您的第一个示例nyc[key]
是使用变量中属性名称的正确方法。
在JavaScript中,可以使用点表示法和属性名称文字(obj.foo
)或括号表示法和属性名称字符串(obj["foo"]
)访问对象属性。在第二种情况下,您可以使用任何表达式来获取字符串,包括变量查找。 (在ES6中,您也可以将Symbol
与方括号表示法一起使用,但此处不相关。)