使用点和文字表示法构造的 JavaScript 对象在调用时的行为如何

how do javascript objects constructed with both dot and literal notation behave when called?

本文关键字:调用 对象 JavaScript 文字 表示      更新时间:2023-09-26

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

["1122","3rd St","Seattle","WA","92838"]
解决

此代码的最接近的线程是需要解释:在联系人列表中具有对象的组织(Javascript,Codecademy),但它并没有完全解决我的担忧。

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

当实际尝试调用搜索(例如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 == friends[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 搜索..."实际上是一个声明,因此不会存储在 $_ 中。

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

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";
};

@cherniv可能会在将回报移出时击败我。