1. ホーム
  2. javascript

[解決済み] cannot read property of undefined" エラーを回避する方法は?

2022-04-27 12:33:21

質問

私のコードでは、多くのオブジェクトが互いに入れ子になっているエントリーがある配列と、そうでないエントリーがある配列を扱います。それは以下のようなものです。

// where this array is hundreds of entries long, with a mix
// of the two examples given
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];

このため、配列を繰り返し処理する必要があり、不整合によって次のようなエラーが発生します。

for (i=0; i<test.length; i++) {
    // ok on i==0, but 'cannot read property of undefined' on i==1
    console.log(a.b.c);
}

と言えるように意識しています。 if(a.b){ console.log(a.b.c)} しかし、これは5つまたは6つのオブジェクトが互いに入れ子になっている場合、非常に面倒です。私はそれが存在する場合、console.logを行うだけで、エラーをスローしないようにすることができる他の(より簡単な)方法はありますか?

解決方法は?

更新情報 :

  • ECMAScript 2020以降に準拠したJavaScriptを使用する場合、以下を参照してください。 オプションチェイニング .
  • TypeScript は、バージョンアップでオプショナルチェイニングをサポートしました。 3.7 .
// use it like this
obj?.a?.lot?.of?.properties


ECMASCript 2020以前のJavaScript、またはバージョン3.7より古いTypeScriptに対する解決策 :

簡単な回避策は、ES6でtry/catchヘルパー関数を使用することです。 矢印機能 :

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

// use it like this
console.log(getSafe(() => obj.a.lot.of.properties));

// or add an optional default value
console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));