当调用时,用点和文字符号构造的javascript对象是如何工作的?

当调用时,用点和文字符号构造的javascript对象是如何工作的?,javascript,Javascript,在运行下面的代码时,如果没有任何函数调用,我会立即得到这个输出 ["1122","3rd St","Seattle","WA","92838"] 解决此代码的最接近的线程是,但它没有完全解决我的问题 我确信,我向对象添加键、值对的方式在某种程度上产生了这种输出,但我似乎无法解释为什么,特别是在运行代码时,没有包含函数调用 当实际尝试调用search(例如search(“steve”))时,它会失败,但会在search(“bill”)上工作。我认为这可能与javascript控制台有关,但我使用

在运行下面的代码时,如果没有任何函数调用,我会立即得到这个输出

["1122","3rd St","Seattle","WA","92838"]
解决此代码的最接近的线程是,但它没有完全解决我的问题

我确信,我向对象添加键、值对的方式在某种程度上产生了这种输出,但我似乎无法解释为什么,特别是在运行代码时,没有包含函数调用

当实际尝试调用search(例如search(“steve”))时,它会失败,但会在search(“bill”)上工作。我认为这可能与javascript控制台有关,但我使用Chrome的控制台进行了检查,得到了相同的结果。任何帮助都将不胜感激

var friends={};
friends.bill = {};
friends.steve={};
friends.bill["firstName"]="Bill";
friends.bill["lastName"]="Gates";
friends.bill.number="333.222.3937";
friends.steve["firstName"]="Steve";
friends.steve.lastName="Ballmer";
friends.steve["number"]="829.383.3939";
friends.bill["number"]="232.8392.2382"
friends.bill.address=['5353','Cook Ave','Bellevue','CA','94838']
friends.steve.address=['1122','3rd St','Seattle','WA','92838']


    var search=function(name)
    {
    for(var i in friends){
        if (name==i["firstName"])
    {
        console.log(friends[i])
        return friends[i]
    }
        else{
            return "no match"
        }

    }
}
尝试更改:

for(var i in friends){
    if (name==i["firstName"])
        ...

你的意思是:

for(var i in friends){
    if( name == i ) { //i would be either "bill" or "steve" and check against name variable
        console.log("Data for:" + i + " firstname is:" + friends[i]["firstName"]);
    }
}

您将看到以下输出:

["1122","3rd St","Seattle","WA","92838"]
因为它是当前存储在$\中的内容(大多数基于浏览器的JS解释器都会在提示符下吐出$\中的内容)

$\是最后一个计算表达式的值,在您的情况下为:

friends.steve.address=['1122','3rd St','Seattle','WA','92838']
“var search…”实际上是一个声明,因此不会存储在$\中

此外,您的搜索功能可能如下所示:

var search = function(name) {
  for(var i in friends) {
    if (name.toLowerCase() == friends[i]["firstName"].toLowerCase()) {
      console.log(friends[i])
      return friends[i]
    }
  }
  return "no match";
};

<> P.>切尔尼夫可能会把我打得一团糟。< /P>我真的不认为它是一个像这样的对象,而不是一个数组,你看,你不认为这些密钥是他们的名字,也不把提供的输入名称与这些密钥进行比较。或者,用这样的方式表达你的if语句:
if(name==friends[i][“firstName”]| name==i)
谢谢你的快速回复!不幸的是,这样做会使搜索(“bill”)也无法工作。至于为什么会这样,我一点也不知道。如果它确实让函数调用搜索(“steve”)记录并返回此人的联系信息,那么我也会这样做,并且可能不得不问,因为我不知道在条件下“I['firstName']”与“friends['I']['firstName']”有何不同。再次感谢。@Choong KyuKim看到我补充的答案了,你的意思是这样的。?是的,这就是我要找的。在我的原始代码中,调用search(“bill”)会起作用,但search(“steve”)不会起作用,即使记录friends.bill和friends.steve似乎也同样有效。谢谢,masahji。这有助于澄清为什么会给出令人费解的结果。我还以为我有一秒钟会发疯呢。
var search = function(name) {
  for(var i in friends) {
    if (name.toLowerCase() == friends[i]["firstName"].toLowerCase()) {
      console.log(friends[i])
      return friends[i]
    }
  }
  return "no match";
};