Assess the object with dot notation error?

Tell us what’s happening:
why records.id.prop = value; will trigger a typerror:Cannot set properties of undefined (setting ‘prop’)?

  **Your code so far**

// Setup
const recordCollection = {
2548: {
  albumTitle: 'Slippery When Wet',
  artist: 'Bon Jovi',
  tracks: ['Let It Rock', 'You Give Love a Bad Name']
},
2468: {
  albumTitle: '1999',
  artist: 'Prince',
  tracks: ['1999', 'Little Red Corvette']
},
1245: {
  artist: 'Robert Palmer',
  tracks: []
},
5439: {
  albumTitle: 'ABBA Gold'
}
};

// Only change code below this line
function updateRecords(records, id, prop, value) {
if(prop !== "tracks" && value !== ""){
  records[id][prop] = value;
}else if(prop === "tracks" && !records[id].hasOwnProperty(prop)){
  records[id][prop] = [value];
}else if(prop === "tracks" && value !== ""){
  records[id][prop].push(value);
}else{
  delete records[id][prop];
}
return records;
}
// why records.id.prop = value; will trigger a typerror:Cannot set properties of undefined (setting 'prop')?

updateRecords(recordCollection, 5439, 'artist', 'ABBA');
  **Your browser information:**

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

Challenge: Record Collection

Link to the challenge:

You can’t use dot notation with variables holding the name of properties. You can only use bracket notation. Dot notation only works with the exact literal name of the property.

2 Likes

Object notation identifiers are not allowed to start with numbers. It’s wrong syntax. Hence we have more than one way to access object properties and methods. Dot notation has its role but here only the Bracket notation strictly works
For more info check this SO thread:

Well this comment is unrelated to your question. I realized it after i typed the whole thing out:/ Anyway its still a reasonable topic

1 Like

Thank you, Jeremy, it makes sense

thank you for this, much appreciate it

1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.