Karim Ali
Karim Ali

Reputation: 2453

Why do I get "undefined has no properties" even though I am checking with Optional chaining (?.) in javascript?

const result = {
  "records": [
    {
      "recordid": "15986521",
      "sf_Parent ID": "10156246",
      "sf_Created Date": "2022-11-30 17:04:45",
      "sf_Status ID": "64521",
      "sf_Type ID": "64551",
      "cf_txtSourceRecordID": "15986054",
      "sf_Level Two ID": "15986521"
    }
  ]
}

//statement that works
if(result && result.records && result.records.length > 0) {
  const getLatestDACCodesID = result.records[0]["sf_Level Two ID"]; 
  console.log('getLatestDACCodesID ',getLatestDACCodesID); 
}

//trying to achieve the same result with Optional chaining (?.)
//statement that doesn't works when my result = {};
if(result && (result?.records)[0]?.["sf_Level Two ID"]) {
  const getLatestDACCodesID = (result?.records)[0]?.["sf_Level Two ID"]; console.log('getLatestDACCodesID ',getLatestDACCodesID); 
}

Upvotes: 0

Views: 75

Answers (2)

Noam-N
Noam-N

Reputation: 914

result?.records?.[0]?.["sf_Level Two ID"] ?? "default"

Upvotes: 2

Konrad
Konrad

Reputation: 24651

It's records that can be undefined

const result = {}

if (result && result.records && result.records.length > 0) {
  const getLatestDACCodesID = result.records[0]["sf_Level Two ID"];
  console.log('getLatestDACCodesID ', getLatestDACCodesID);
}

if (result.records?.[0]["sf_Level Two ID"]) {
  const getLatestDACCodesID = result.records?.[0]["sf_Level Two ID"];
  console.log('getLatestDACCodesID ', getLatestDACCodesID);
}

Upvotes: 3

Related Questions