JavaScript:对象的奇怪行为

时间:2013-07-16 09:31:09

标签: javascript

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???
  }

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

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

的值的属性
  • person [x]会评估x到它的值
  • person.x将采用属性x

答案 2 :(得分: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概念,herehere