Why using myObj[checkProp] is run but using myObj.checkProp is not?

Tell us what’s happening:

Your code so far


// Setup
var myObj = {
  gift: "pony",
  pet: "kitten",
  bed: "sleigh"
};

function checkObj(checkProp) {
  // Your Code Here
  if(myObj.hasOwnProperty(checkProp)) {
    return myObj[checkProp];
  }
  return "Not Found"
}

// Test your code by modifying these values
checkObj("gift");

Your browser information:

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

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-javascript/testing-objects-for-properties/

I don’t understand why using myObj[checkProp] is run but using myObj.checkProp is not?

The two options you mention do different things:

var checkProp = gift;

myObj[checkProp]// go to myObj and get the value from the gift property

myObj.checkProp// go to myObj and get the value from the checkProp property

In general you want to use bracket notation if you are using a variable/parameter (such as checkProp) to access a variable. It also comes in handy if you have a property name with spaces: myObj["has spaces"] or if the property you are trying to access begins with a number. Other than that, dot notation is usually the best option.

Hope this help clear things up :slight_smile:

4 Likes

I get it. Thanks for helping me to understand the difference between them.