4

codecademy的这个联系人列表项目中,我在理解两个 javascript 函数时遇到了一些麻烦。

具体来说,我对“obj”或“prop”之类的条件感到困惑。如果有人能详细解释这些功能是如何工作的,我将不胜感激。

这是代码&谢谢:

var friends = {};
friends.bill = {
  firstName: "Bill",
  lastName: "Gates",
  number: "(206) 555-5555",
  address: ['One Microsoft Way','Redmond','WA','98052']
};
friends.steve = {
  firstName: "Steve",
  lastName: "Jobs",
  number: "(408) 555-5555",
  address: ['1 Infinite Loop','Cupertino','CA','95014']
};

var list = function(obj) {
  for(var prop in obj) {
    console.log(prop);
  }
};

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

list(friends);
search("Steve");
4

2 回答 2

0

obj 是函数传入的参数list。for 遍历该 obj 的名称。例如:

var a = {x:5}

for(var prop in a){
    //here prop will be 'x' and a[prop] will be 5 (a['x'] is 5)
    //same goes again for objects that have multiple properties
}

在你的情况下:

var list = function(obj) {
  for(var prop in obj) {
    console.log(prop); // here will be logged Bill and Steve, because they are properties of friends -object
  }
};
于 2013-03-14T20:28:39.533 回答
0

obj只是list您正在创建的函数的参数名称。它没有特别的意义。你可以把它叫做fooor object,或者任何对你有意义的东西。您传递给 list 的函数调用的参数的值(上图,即friends)存储在函数范围内的参数中。也就是说,obj本质上是friends在操作的代码里面变成了list

prop类似:它只是作为 JavaScriptfor...in语法的一部分创建的变量。 for in循环遍历作为构造参数的对象的属性名称,in并将它们一一存储在prop. 同样,您可以随意调用它:

var list = function (foo) {
    for (var bar in foo) {

但是,我相信您已经了解到,给变量名赋予一些含义是有意义的,因此obj是“object”的缩写,因为list函数对任何通用对象进行操作,并且prop是“property”的缩写。

请记住,for...in循环遍历属性名称。要访问相应的值,您应该使用:

if (obj.hasOwnProperty(prop)) {
    //access via obj[prop];
}

search函数实际上是这样做的,但没有推荐的hasOwnProperty检查。

于 2013-03-14T20:34:32.677 回答