首頁 >web前端 >js教程 >如何安全地存取 JavaScript 中的巢狀屬性以避免「無法讀取未定義的屬性」錯誤?

如何安全地存取 JavaScript 中的巢狀屬性以避免「無法讀取未定義的屬性」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-06 22:22:13714瀏覽

How Can I Safely Access Nested Properties in JavaScript to Avoid

解決未定義的屬性錯誤

處理JavaScript 中的巢狀資料結構時,遇到「無法讀取未定義的屬性”錯誤可能會令人沮喪。當嘗試存取未定義或空值的屬性時,會發生這種情況。考慮以下數組:

const test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];

迭代此數組並嘗試記錄屬性c,如下所示:

for (i=0; i<test.length; i++) {
    console.log(a.b.c);
}

將導致第二個條目出現錯誤,其中a.b 是不明確的。為了避免此錯誤,常見的方法是檢查屬性鏈的每個層級:

if (a && a.b) {
    console.log(a.b.c);
}

但是,在處理深度嵌套的資料結構時,這可能會變得乏味。幸運的是,還有替代解決方案。

可選連結(ES2020 和TypeScript 3.7 )

如果您根據ECMAScript 2020 或更高版本或TypeScript 3.7 版本使用Java或更高,您可以利用可Script選鏈。此運算子 ?. 可以安全地存取巢狀屬性,而不會引發錯誤。

console.log(obj?.a?.lot?.of?.properties);

輔助函數解決方法(早期JavaScript 版本)

對於早期版本的JavaScript,帶有ES6 箭頭函數的try/catch 輔助函數可以提供解決方案。

function getSafe(fn, defaultVal) {
  try {
    return fn();
  } catch (e) {
    return defaultVal;
  }
}

console.log(getSafe(() => obj.a.lot.of.properties));

你也可以提供可選的預設值:

console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));

以上是如何安全地存取 JavaScript 中的巢狀屬性以避免「無法讀取未定義的屬性」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn