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
Barbara Streisandasal
2024-12-06 03:39:10267semak imbas

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);
}

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!

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