4

我在这里的第一个问题需要帮助理解 JavaScript 中的 for in 循环。

当我运行以下代码时,我从警报函数中得到“未定义”:

var o = {
  a: "property 1", 
  b: "property 2", 
  c: "property 3", 
  d: "property 4"
}

for (p in o) {
  alert(o.p); 
}

但是如果我要更改.[ ](即alert(o[p]))警报将按预期返回属性值。

为什么我不能.用来访问对象属性?

4

4 回答 4

3

想象一下你有这个对象:

var o = {
  a: "property 1", 
  b: "property 2", 
  c: "property 3", 
  d: "property 4",
  p: "property 5"
}

并运行以下命令:

for (p in o) {
  console.log(o.p);
}

结果将是:

property 5
property 5
property 5
property 5
property 5

因为o.p意味着你想要获取一个名为 的属性的值p

同样在您的示例中,该属性p未在您的对象中定义。

如果要通过字符串获取属性的值,则必须使用[]表示法。

于 2013-08-28T18:35:11.060 回答
2
o[p]

是数组 o 中的第 p 个元素。

o.p

是数组 o 的属性 p,它被正确报告为未定义,因为它不存在。

于 2013-08-28T18:33:22.207 回答
2

op 表示 的属性“p” o

o["p"] 的意思是一样的。

o[x] 表示 的某些属性(其值由 variable 定义xo

o[p] 一样。

于 2013-08-28T18:35:44.170 回答
1

如果你仔细看看这个 for in 循环:

var obj = {
  a: "property 1", 
  b: "property 2", 
  c: "property 3", 
  d: "property 4"
}
for (var prop in obj) {
    if (typeof(prop) == 'string') {
        console.log('This is a string!');
    }
}

您会注意到 for in 循环给您的是属性的名称。这就是为什么可以使用的obj[prop]原因,因为该属性将是一个字符串,这是访问对象属性的合法方式。

当您尝试执行obj.prop它时,它会给您 undefined 因为 property 是一个表示属性名称的字符串,它不是实际的属性。

于 2013-08-28T19:10:37.850 回答