对象中的对象的JavaScript点表示法

时间:2013-11-25 11:13:42

标签: javascript syntax

我现在正在玩JS,来自Java。我做了一些教程,需要帮助JS中的点和括号表示法。

我做了一些东西,我认为JS中的“对象”。它被称为“朋友”。在这个对象中,还有另一个对象“bill”。

var friends = {};
 friends.bill = {
  firstName: "Bill",
  lastName: "Gates",
  number: "(206) 555-5555",
  address: ['One Microsoft Way','Redmond','WA','98052']
 };

 var search = function(name) {
 for(var prop in friends) {
  if(friends[prop].firstName === name) {
   return friends[prop];
  }
 }
};
search("Bill");

这显然是按预期工作的。我在搜索功能中使用括号表示法。 但是我不清楚为什么这个版本不会以同样的方式工作:

 var search = function(name) {
 for(var prop in friends) {
  if(friends.prop.firstName === name) {
   return friends.prop;
  }
 }

根据我的理解,括号和点符号用于相同的事情。我对stackoverflow进行了搜索,我认为this问题的方式是一样的,但我认为我并不完全理解所有引号的问题。

4 个答案:

答案 0 :(得分:2)

使用括号表示法时,在括号中输入要访问的属性的名称,名称为字符串。

使用点表示法时,键入属性名称,而不是包含点后属性名称的字符串。

你的专栏:

friends.prop

由JavaScript解释如下:

在对象prop上查找名为friends的属性,并且没有这样的属性,因此您会遇到问题。

答案 1 :(得分:2)

您不能使用带点符号的变量。不会评估变量。 JavaScript将尝试从您的对象访问属性prop,因为第二个解决方案无效。

答案 2 :(得分:0)

friends.firstName相当于friends ['firstName']

答案 3 :(得分:0)

如前所述friends.prop.firstName不会将prop评估为变量,而是评估friends对象的属性。

如果由于某种原因,您希望使用这种类型的表示法,可以将字符串计算为对象。

var search = function(name) {
  for(var prop in friends) {
    if(eval("friends."+prop+".firstName) === name) {
     return eval("friends."+prop);
    }
  }
};