【问题标题】:Accessing object properties in javascript using for loop?使用for循环访问javascript中的对象属性?
【发布时间】:2015-10-07 23:08:43
【问题描述】:

考虑以下对象:

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 行上返回 "undefined"

为什么会出现这种奇怪的行为,因为两者都有:

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

给出相同的o/p。

【问题讨论】:

  • @Kyll:不,那是在询问使用其中一个或另一个的原因,明确地“除了显而易见的”您可以将变量与其中一个一起使用。我敢肯定有一个骗子(可能有几十个,都略有不同),但事实并非如此。
  • 但是那里的答案实际上并没有回答这个问题吗?我read on Meta 我应该为了答案而不是为了问题而将其标记为骗子。
  • @Kyll:我会说不,他们谈论使用其中一种的原因,而不是根本原因。 (特别是接受/赞成的。)但这可能是一个判断电话。不过,我确信那里有一个很好的原件可以指出这一点。如果不是,这是我见过的这个问题的最纯粹的版本之一,它可能成为规范的版本。 (但必须有一个。)
  • 那么,如果需要更具体的东西,stackoverflow.com/questions/20736758/… 应该可以解决问题,不是吗?不过我的标志已经用光了。

标签: javascript oop object for-loop


【解决方案1】:

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

在 JavaScript 中,您可以使用点表示法和属性名称 literal (obj.foo) 或括号表示法和属性名称 string (@987654326) 访问对象属性@)。在第二种情况下,您可以使用任何表达式来获取字符串,包括变量查找。 (在 ES6 中,你也可以使用带括号的Symbols,但这里不相关。)

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2021-03-15
    • 2020-01-31
    • 2016-08-18
    相关资源
    最近更新 更多