Huraian masalah tidak menyeluruh
Masalah saya ialah apabila tatasusunan saya ditakrifkan seperti berikut:
let a = [undefined, undefined]
a[9] = 1
console.log(a) //[undefined, undefined, undefined × 7, 1]
Adakah terdapat sebarang perbezaan antara yang dijana secara automatik tidak ditentukan di sini dan yang saya takrifkan
Mengapa saya tidak boleh melintasinya apabila saya menggunakan traversal terbina dalam?
a.forEach(it => console.log(it)) // 也只会有三个结果
Oleh kerana apa yang anda takrifkan ialah tatasusunan jarang (tatasusunan jarang, panjang tatasusunan lebih besar daripada bilangan elemen tatasusunan Anda boleh menggunakan
in
untuk mengesan sama ada unsur tatasusunannya wujud:Dan
forEach
hanya akan merentasi elemen di mana indeks asal wujud.Ini adalah perangkap tatasusunan, undefined ini bukanlah undefined. Yang dijana secara automatik dipanggil "slot kosong", dan chrome hanya menunjukkannya sebagai tidak ditentukan. Anda juga boleh melihat bahawa undefined sebenar adalah output satu demi satu, dan slot kosong mengeluarkan perkataan seperti "undefined × 7".
untukSetiap, peta dan seumpamanya akan melangkau slot kosong. Sila rujuk penyelesaian
Oleh kerana forEach ditulis seperti ini, forEach terbina dalam akan diteruskan apabila ia menemui undefined
Anda boleh menulis sendiri versi tidak melangkau
Anda boleh memikirkan masalah ini dari sudut lain:
var a = [1,2,3,4]
padam a[0]
console.log(a)//[undefined × 1, 2, 3, 4]
a.length//4
a.forEach(it=>console.log(it))// 2 3 4
Berbalik kepada soalan, apabila forEach dikapsulkan, "undefined" ini akan dilangkau, anda boleh menulis semula ia Cuba kaedah ini, tidak kira berapa nilainya, ia sepatutnya boleh dicetak seperti biasa