Cara Mengelakkan Ralat Harta Yang Tidak Ditakrifkan
Dalam JavaScript, adalah perkara biasa untuk menemui tatasusunan yang mengandungi campuran objek dengan pelbagai peringkat sarang. Ini boleh membawa kepada ralat apabila melelaran ke atas tatasusunan jika tidak semua objek mempunyai kedalaman yang sama.
Masalahnya:
Apabila cuba mengakses sifat bersarang objek, JavaScript akan membuang ralat jika laluan ke harta itu tidak wujud. Sebagai contoh, dalam kod berikut:
var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}]; for (i=0; i<test.length; i++) { console.log(a.b.c); }
Gelung akan membuang ralat "tidak dapat membaca sifat yang tidak ditentukan" apabila i ialah 1, kerana elemen kedua dalam tatasusunan ujian hanya mempunyai satu sifat, bukan harta b bersarang.
Penyelesaian:
Satu cara untuk mengelakkan ralat ini adalah dengan menggunakan pengendali bersyarat untuk menyemak sama ada setiap sifat wujud sebelum mengaksesnya:
for (i=0; i<test.length; i++) { if (a.b) { console.log(a.b.c); } }
Walau bagaimanapun, pendekatan ini boleh menjadi membosankan jika anda mempunyai objek bersarang dalam atau berbilang sifat untuk diperiksa.
Pilihan Rantaian (ES2020 ):
Untuk versi JavaScript lewat daripada ES2020, pilihan chaining (?.) menyediakan cara yang lebih ringkas untuk menyemak kewujudan harta sebelum mengaksesnya. Contohnya:
for (i=0; i<test.length; i++) { console.log(a?.b?.c); }
Jika a atau b tidak wujud untuk sebarang objek dalam tatasusunan, pengendali rantaian pilihan akan kembali tidak ditentukan dan bukannya membuang ralat.
getSafe () Fungsi Pembantu (pra-ES2020):
Untuk versi JavaScript sebelum ES2020, anda boleh mentakrifkan fungsi pembantu yang menggunakan blok cuba/tangkap untuk mengakses sifat dengan selamat:
function getSafe(fn, defaultVal) { try { return fn(); } catch (e) { return defaultVal; } } for (i=0; i<test.length; i++) { console.log(getSafe(() => a.b.c)); }
Fungsi ini akan mengembalikan nilai harta jika wujud, atau nilai lalai jika harta itu tidak wujud.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Ralat 'Tidak Dapat Membaca Harta yang Tidak Ditakrifkan' dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!