Rumah  >  Soal Jawab  >  teks badan

javascript - Mengapa tatasusunan yang tidak ditentukan dalam js tidak dilalui?

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中文网2662 hari yang lalu920

membalas semua(4)saya akan balas

  • 某草草

    某草草2017-07-05 10:52:19

    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.

    balas
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-07-05 10:52:19

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

    balas
    0
  • 淡淡烟草味

    淡淡烟草味2017-07-05 10:52:19

    Oleh kerana forEach ditulis seperti ini, forEach terbina dalam akan diteruskan apabila ia menemui undefined
    Anda boleh menulis sendiri versi tidak melangkau

    balas
    0
  • 漂亮男人

    漂亮男人2017-07-05 10:52:19

    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

    balas
    0
  • Batalbalas