Why can't I access the object directly?

Tell us what’s happening:
Describe your issue in detail here.
Why should I not access the object directly?

  **Your code so far**

let users = {
Alan: {
  age: 27,
  online: true
},
Jeff: {
  age: 32,
  online: true
},
Sarah: {
  age: 48,
  online: true
},
Ryan: {
  age: 19,
  online: true
}
};

function isEveryoneHere(userObj) {
// Only change code below this line
if( 'Alan' in userObj&& 'Jeff' in userObj&& userObj.hasOwnProperty('Sarah')&&userObj.hasOwnProperty('Ryan')
){
  return true
}return false;

// Only change code above this line
}

console.log(isEveryoneHere(users));
  **Your browser information:**

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36

Challenge: Check if an Object has a Property

Link to the challenge:

1 Like

You can, you just have to use the correct syntax.

For example this tests if there is an Alan:

function isAlanHere(userObj) {
if ( userObj.Alan)
  return true
return false;
}

Great question. I think the main use of hasOwnProperty() is when that property could be in the prototype of the object.

For example, we could type:

const obj = {word:'hello'}
console.log(obj['constructor']) //logs function Object()
console.log(obj.hasOwnProperty(['constructor'])) //logs false

So for writing serious code, where you don’t know what is defined in the prototype you may use hasOwnProperty() but in this case it’s fine to use userObj[Alan] or userObj.Alan as is was suggested.