需要说明:联系人列表中对象的组织(Javascript, Codecademy)

Need Explanation: Organization with Objects in a Contact List (Javascript, Codecademy)

本文关键字:Javascript Codecademy 对象 说明 联系人 列表      更新时间:2023-09-26

我在codecademy的联系人列表项目中遇到了一些问题。

具体来说,我对"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");

obj只是您正在创建的list函数的参数名称。它没有特别的含义。你可以叫它foo或者object,或者任何你觉得有意义的东西。传递给list函数调用的实参的值(即friends)存储在函数作用域中的形参中。也就是说,objlist的代码内运行,实质上变成了friends

prop是类似的:它只是一个变量,创建作为JavaScript的for...in语法的一部分。for in循环遍历作为in构造参数的对象的属性名,并将它们逐个存储在prop中。同样,你可以给它取任何你想要的名字:

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

然而,我相信你已经学会了,给变量名一些含义是有意义的,所以obj是"对象"的缩写,因为list函数对任何一般对象进行操作,prop是"属性"的缩写。"

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

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

search函数实际上执行此操作,但没有推荐的hasOwnProperty检查。

obj是list函数传递的参数。For遍历该对象的名称。例如:

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