我在contact list project codecademy上的{{3}}中理解两个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");
答案 0 :(得分:0)
obj是list
函数中传递的参数。用于迭代该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
}
};
答案 1 :(得分:0)
obj
只是您正在创建的list
函数的参数名称。它没有特别的意义。您可以将其称为foo
或object
,或其他任何对您有意义的内容。传递给list的函数调用的参数的值(上面,即friends
)存储在函数范围内的参数中。也就是说,obj
在friends
代码内操作时基本上变为list
。
prop
类似:它只是作为JavaScript for...in
语法的一部分创建的变量。 for in
遍历作为in
构造的参数的对象的属性名称,并将它们逐个存储在prop
中。再一次,你可以随意调用它:
var list = function (foo) {
for (var bar in foo) {
但是,我确信你已经学会了,给变量名称赋予一些意义是有意义的,所以obj
是“object”的缩写,因为list
函数对任何一般对象都有效,prop
是“财产”的缩写。
请注意for...in
遍历属性名称。要访问correspoding值,您应该使用:
if (obj.hasOwnProperty(prop)) {
//access via obj[prop];
}
search
函数实际上是这样做的,但没有推荐的hasOwnProperty
检查。