javascript - Mengapa tatasusunan yang tidak ditentukan dalam js tidak dilalui?
PHP中文网
PHP中文网 2017-07-05 10:50:19
0
4
971

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))    // 也只会有三个结果
PHP中文网
PHP中文网

认证0级讲师

membalas semua(4)
某草草

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:

'0' in a  // true,索引存在.
'1' in a  // true
'2' in a  // false,索引不存在
'9' in a  // true

Dan forEach hanya akan merentasi elemen di mana indeks asal wujud.

过去多啦不再A梦

Adakah terdapat sebarang perbezaan antara yang dijana secara automatik tidak ditentukan di sini dan yang saya takrifkan?

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

console.log(Array.from(a))
淡淡烟草味

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan