Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mencegah Ralat 'Tidak Dapat Membaca Harta yang Tidak Ditakrifkan' dalam JavaScript?

Bagaimana untuk Mencegah Ralat 'Tidak Dapat Membaca Harta yang Tidak Ditakrifkan' dalam JavaScript?

Barbara Streisand
Lepaskan: 2024-12-06 03:39:10
asal
224 orang telah melayarinya

How to Prevent

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);
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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));
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan