Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengelakkan Ralat 'Tidak Dapat Membaca Harta Yang Tidak Ditakrifkan' dalam JavaScript?

Bagaimanakah Saya Boleh Mengelakkan Ralat 'Tidak Dapat Membaca Harta Yang Tidak Ditakrifkan' dalam JavaScript?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-23 01:26:09993semak imbas

How Can I Avoid

Mengelakkan Ralat 'Tidak Dapat Membaca Sifat Tidak Ditakrifkan'

Apabila bekerja dengan struktur data yang kompleks, ralat yang berkaitan dengan sifat yang tidak ditentukan adalah perkara biasa. Pertimbangkan contoh berikut:

// This array contains a mix of nested objects and non-nested values
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];

Lelaran melalui ujian boleh membawa kepada ralat apabila mengakses sifat objek bersarang yang mungkin tidak wujud. Sebagai contoh, kod berikut menimbulkan ralat semasa mengakses a.b.c:

for (i=0; i<test.length; i++) {
    console.log(a.b.c); // Throws error on i==1
}

Untuk mengelakkan ralat tersebut, beberapa pendekatan boleh digunakan:

Perantaian Pilihan (ES2020 ) dan TypeScript 3.7

Kemas kini: Untuk moden pelayar dan TypeScript, penyelesaian yang disyorkan ialah operator rantaian pilihan (?.):

obj?.a?.lot?.of?.properties

Penyelesaian Berasaskan Fungsi (Pra-ES2020 dan Pra-TypeScript 3.7)

Penyelesaian mudah ialah menggunakan fungsi pembantu:

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

// Use the function to access the property safely
console.log(getSafe(() => obj.a.lot.of.properties));

Fungsi ini mengembalikan hasil panggilan fungsi yang disediakan, atau nilai lalai jika ralat berlaku. Menggunakan pendekatan ini, anda boleh mengelakkan ralat dan mengakses sifat bersarang secara bersyarat:

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

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Ralat 'Tidak Dapat Membaca Harta Yang Tidak Ditakrifkan' dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn