Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengakses Hartanah Bersarang dengan Selamat dalam JavaScript untuk Mengelakkan Ralat 'Tidak Dapat Membaca Sifat Tidak Ditakrifkan'?
Mengatasi Ralat Harta Yang Tidak Ditakrifkan
Apabila berurusan dengan struktur data bersarang dalam JavaScript, menghadapi ralat "tidak dapat membaca sifat yang tidak ditentukan" boleh mengecewakan. Ia berlaku apabila percubaan dibuat untuk mengakses sifat nilai yang tidak ditentukan atau batal. Pertimbangkan tatasusunan berikut:
const test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}];
Lelaran melalui tatasusunan ini dan cuba log sifat c, seperti:
for (i=0; i<test.length; i++) { console.log(a.b.c); }
akan mengakibatkan ralat pada entri kedua di mana a.b adalah tidak ditentukan. Untuk mengelakkan ralat ini, pendekatan biasa melibatkan pemeriksaan setiap peringkat rantaian harta benda:
if (a && a.b) { console.log(a.b.c); }
Walau bagaimanapun, ini boleh menjadi membosankan apabila berurusan dengan struktur data bersarang dalam. Nasib baik, terdapat penyelesaian alternatif.
Perantaian Pilihan (ES2020 dan TypeScript 3.7 )
Jika anda menggunakan JavaScript mengikut ECMAScript 2020 atau lebih baharu, atau TypeScript versi 3.7 atau lebih tinggi, anda boleh memanfaatkan rantaian pilihan. Pengendali ini, ?., mengakses sifat bersarang dengan selamat tanpa membuang ralat.
console.log(obj?.a?.lot?.of?.properties);
Penyelesaian Fungsi Pembantu (Versi JavaScript Terdahulu)
Untuk versi JavaScript yang lebih awal, a cuba/tangkap fungsi pembantu dengan fungsi anak panah ES6 boleh menyediakan a penyelesaian.
function getSafe(fn, defaultVal) { try { return fn(); } catch (e) { return defaultVal; } } console.log(getSafe(() => obj.a.lot.of.properties));
Anda juga boleh memberikan nilai lalai pilihan:
console.log(getSafe(() => obj.a.lot.of.properties, 'nothing'));
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Hartanah Bersarang dengan Selamat dalam JavaScript untuk Mengelakkan Ralat 'Tidak Dapat Membaca Sifat Tidak Ditakrifkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!