以下代码:
var obj = {uname:"OdO", age:"22"};
alert(obj.uname);
结果:
OdO
现在,在for..in
语句中使用相同的概念:
for (x in obj) {
document.write(obj.x+"<br>");
}
我预计它会打印以下内容:
OdO
22
但它打印出来:
undefined
undefined
要在元素中实现打印循环,它应该写成这样的数组元素:
for (x in obj) {
document.write(obj[x]+"<br>");
}
然后,为什么第一种语法不起作用,但它是否在for..in
语句之外?
答案 0 :(得分:8)
当您编写obj.x
时,这会在obj
中查找名为“x”的属性 - 就像obj.size
会查找名为“size”的属性一样。 x
没有为您的对象定义,因此它没有任何内容。编写它的正确方法 - obj[x]
- 使用变量 x
在对象中查找属性。括号语法使用括号内的值来查找属性,而点语法将属性名称转换为字符串。所以这两个是等价的:
obj.x
obj["x"]
因此,当您在x
之后编写obj.
时,它会将x
转换为字符串 - 它不再是变量。
答案 1 :(得分:4)
括号语法用于接收名称为表达式的属性(表达式可以是文字,变量或更复杂的东西):
var x = "a";
{a:0, b:1}[x] == 0;
点语法用于接收具有该名称的属性:
({a:0, x:1}).x == 1;
在for-for-loop中,变量x
包含属性名称。您正在尝试访问名为"x"
的属性,该属性未定义。
答案 2 :(得分:2)
当属性名称存储在名为“x”的变量中时使用括号形式(obj[x]
),当属性名称字面obj.x) >“x”。
例如:
var o = {foo:1};
o.foo; // => 1
var x = 'foo';
o[x]; // => 1, since x='foo' and has a property named "foo".
o.x; // => undefined, since "o" has no property named "x".
答案 3 :(得分:0)
尝试
for(var x in obj){
console.log(obj[x]);
}
答案 4 :(得分:0)
这对我有用:
var obj = {uname:"OdO", age:"22"};
for (x in obj) {
document.write(obj[x.toString()] + "<br>");
}