0
var person={fname:"John",lname:"Doe",age:25};
person.fname; //it gives a output John

for (x in person)
  {
  alert(person[x]); //works fine
  person.x;    //incorrect why???
  }

有人可以解释一下这背后的确切逻辑吗?

4

3 回答 3

4
var person = {fname:"John", lname:"Doe", age:25};

for (var x in person) {
    alert(person[x]); 
}

在循环中 x 假定三个不同的值:fnamelnameage。通过这样做person[x],您正在尝试访问三个不同的属性。这就像做person['fname'],person['lname']person['age']。它们与 , 和 是一样的person.fnameperson.lname它们person.age是person 对象的定义属性。如果您这样做person.x,您正在尝试访问x正确返回的未声明属性undefined

的用法[]也称为括号表示法,在迭代和其他事情的情况下需要它,例如为用户输入(例如)给定的对象设置动态属性,但它们的使用范围很大。

于 2013-07-16T09:35:24.963 回答
0

person.fname会给你fname对象的person对象。

person.lname会给你lname对象的person对象。

person.age会给你age对象的person对象。

for (x in person)
      {
        alert(person[x]);    
      }

它将遍历 person 对象。而在person.x;“x”中是人员对象的未知属性。

最好在此处此处了解一些基本的 javascript 概念。

于 2013-07-16T09:45:18.720 回答
0

这是因为 Javascript 无法决定您是要访问对象 person 的 x 属性(例如,如果 person={x:100,y:65}),还是要访问字符串x的值的属性。

  • person[x] 将评估 x 的值
  • person.x 将获取属性 x
于 2013-07-16T09:39:02.590 回答