2014-10-28 27 views
-1

我目前正在浏览codeacademy.com上的javascript轨道。在for循环中引用对象属性的表示法

当前的教训让我做到这一点,这将打印出每个属性的值:

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个属性值,而是将4个单词'undefined'打印出来。 对我来说,我不应该能够使用点符号访问属性,这似乎不合逻辑。如果这不是codeacademy课程的一些特点,那么有人可以向我解释这个吗?

+0

为什么我要低调?是因为这是重复的吗? – Totem 2014-10-28 17:17:50

回答

2

因为nyc.p相当于nyc["p"],推测该物体没有p属性。

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

+0

你是说点表示法只能引用一个常量的对象属性? – Totem 2014-10-28 02:07:16

+1

@图腾我在答复中说了很多,是的。 ;)它不能用来查找所有的属性名称。例如,你可以做'a [“*() - ”]',但显然你不能做'a。*() - '。这只是一个简短的符号,用于提前知道使用大多数字母数字名称的属性。如果您事先不知道属性名称(或者想要使用某种循环结构来查找例如数组中的属性名称,以避免代码重复),或者属性名称也不是有效的JavaScript标识符,你需要使用括号语法。 – cdhowie 2014-10-28 02:09:38