【问题标题】:Notation for referencing object properties in for loop [duplicate]在 for 循环中引用对象属性的表示法[重复]
【发布时间】:2014-12-23 08:23:51
【问题描述】:

我目前正在浏览 codeacademy.com 上的 javascript 跟踪。

本课让我这样做,会打印出每个属性的值:

var nyc = {
    fullName: "New York City",
    mayor: "Bill de Blasio",
    population: 8000000,
    boroughs: 5
};

// write a for-in loop to print the value of nyc's properties
for(var p in nyc){
    console.log(nyc[p]);
}

一切都非常简单。但我的问题是,为什么当我在 for 循环中使用点符号时这不起作用?像这样:

for(var p in nyc){
    console.log(nyc.p);
}

它不是打印出 4 个属性值,而是打印出单词“未定义”四次。 对我来说,我也不应该能够使用点符号访问该属性,这似乎不合逻辑。如果这不是 codeacademy 课程的一些特殊之处,那么有人可以向我解释一下吗?

【问题讨论】:

  • 为什么我被否决了?是因为这是重复的吗?

标签: javascript


【解决方案1】:

因为nyc.p等价于nyc["p"],推测对象没有p属性。

JavaScript 中的a.b 等价于a["b"],只是语法糖。通过变量名查找属性的唯一方法是使用方括号表示法,因为点表示法总是指的是一个常量硬编码的属性名。

【讨论】:

  • 你是说点符号只能引用一个常量的对象属性?
  • @Totem 我在回答中说了很多,是的。 ;) 而且它不能用于查找所有属性名称。例如,你可以做a["*()-"],但显然你不能做a.*()-。它只是访问具有您提前知道的主要字母数字名称的属性的简写符号。如果您不提前知道属性名称(或者想使用一些循环结构在例如数组中查找属性名称,以避免代码重复),或者属性名称也不是有效的 JavaScript 标识符,您需要使用括号语法。
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2020-04-05
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多