今天在做FreeCodeCamp的Profile Lookup时,test一直不正确,最后通过代码如下:
//Setup
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
}
];
function lookUp(firstName, prop){
// Only change code below this line
var back;
for(var i=0; i<contacts.length; i++){
if(contacts[i].firstName == firstName && (prop in contacts[i])){
back = contacts[i][prop];
break;
}
if(contacts[i].firstName != firstName && (prop in contacts[i])){
back = "No such contact";
}
if(contacts[i].firstName == firstName && !(prop in contacts[i])){
back = "No such property";
break;
}
}
return back;
// Only change code above this line
}
// Change these values to test your function
lookUp("Akira", "address");
初始代码是这样子的:
function lookUp(firstName, prop){
// Only change code below this line
var back;
for(var i=0; i<contacts.length; i++){
if(contacts[i].firstName == firstName && contacts[i][prop] !== null){
back = contacts[i][prop];
break;
}
if(contacts[i].firstName != firstName && (prop in contacts[i])){
back = "No such contact";
}
if(contacts[i].firstName == firstName && !(prop in contacts[i])){
back = "No such property";
break;
}
}
return back;
// Only change code above this line
}
搞混了属性值和属性是否存在的判断。
期间在判断prop属性是否存在还使用了另外几种判断方法:
- 循环遍历对象的属性
- in 方法
- 它可以判断不存在的属性和存在的属性但其值为undefined
- 是否为undefined
- 当属性存在并值为undefined时无法判断
简单的一点心得,细水长流。