我在这里的第一个问题需要帮助理解JavaScript中的for循环。
当我运行以下代码时,我从alert函数中得到“undefined”:
var o = {
a: "property 1",
b: "property 2",
c: "property 3",
d: "property 4"
}
for (p in o) {
alert(o.p);
}
但如果我要将.
更改为[ ]
(即alert(o[p])
),则警报会按预期返回属性值。
为什么我不能使用.
来访问对象属性?
答案 0 :(得分: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
。
如果您想通过字符串获取属性的值,则必须使用[]
表示法。
答案 1 :(得分:2)
o[p]
是数组o中的第p个元素。
o.p
是数组o的属性p,它被正确报告为未定义,因为它不存在。
答案 2 :(得分:2)
o.p表示o
的属性“p”。
o [“p”]表示同样的事情。
o [x]表示x
的某些属性(其值由变量o
定义)。
o [p]相同。
答案 3 :(得分:1)
如果你仔细看看这个循环:
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循环给你的是属性的名称。
这就是使用obj[prop]
的原因,因为该属性是一个字符串,这是访问对象属性的合法方式。
当您尝试执行obj.prop
时,它会给您未定义因为property是一个表示属性名称的字符串,它不是实际属性。