Problem. js basic * 101

why not let me use && instead of having to nest IF?

it should have to work, I don’t see why and I’ve already tried every possible way and it gives an error for that topic.

if (contacts[i].firstName === name) {
    if (contacts[i].hasOwnProperty(prop) === true) {
    return contacts[i][prop];                                                                                                                            
                                                                                                                                                                                       
   if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop) ===true) {                                                                                                                                                                              
      return contacts[i][prop]; }

why are these 2 not the same?

**Información de tu navegador:**

El agente de usuario es: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36

Desafío: Búsqueda de perfiles

Enlaza al desafío:

Both if statements are equivalent (although you nested the 3rd within the 1st if statement and used == instead of ===, but I assume that is not your actual code).

Could you please post the complete function?

PS. Instead of writing if (thisIsTrueOrFalse === true) you should simply write if (thisIsTrueOrFalse), there is no difference.

PPS. You don’t need hasOwnProperty. This is only useful if you want to know if a property belongs to an object itself or its prototype, so contacts[i][prop] is ok if contacts[i] exists (if you want to be super fancy, check out the optional chaining operator).

the one above is the wrong one and the one below the one that works

I also have the doubt why in the correct one the last Return needs to be outside the loop

I also tried with:

else if (contacts[i].firstName !== name && contacts[i][prop]) {
return "No such contact";

Well what happens in your function if you check for lookUpProfile("Sherlock", "likes")?

  • enter loop, i is 0
  • contacts[0].firstName is Akira, so not Sherlock
  • function returns No such contact

Return statements terminate a function, so the loop ends immediately, before even checking the other entries in the contacts array.