Please format your code with triple backticks (explanation here).
Here are your issues (in the comments):
for (i = 0; i < contacts.length; i++) { // You didn't declare `i`
// properly - it now exists in the global scope (this isn't affecting
// the running of your code, but can often cause problems)
if (contacts[i].firstName===firstName) {
if (contacts[i][prop]===prop) { // Assuming the value passed in
// for `prop` was "likes", this would then be testing whether the value
// corresponding to the key "likes" for the profile being tested was
// the string "likes".
return contacts[i][prop];
} else if (contacts[i].hasOwnProperty(prop)===false) {
return "No such property";
}
} else if (contacts[i].firstName!==firstName) {
return "No such contact";
} // This runs within _each_ iteration of the for loop, which means
// the function will return "No such contact" in all cases except the
// case where the profile you're looking up is at index 0.
}