recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Pourquoi le tableau non défini dans JS n'est-il pas traversé?

La description du problème n'est pas exhaustive

Mon problème est lorsque mon tableau est défini comme suit :

let a = [undefined, undefined]

a[9] = 1

console.log(a)                //[undefined, undefined, undefined × 7, 1]

Y a-t-il une différence entre l'indéfini généré automatiquement ici et celui que j'ai défini

 ?

Pourquoi ne puis-je pas les parcourir lorsque j'utilise la traversée intégrée ?

a.forEach(it => console.log(it))    // 也只会有三个结果
PHP中文网PHP中文网2703 Il y a quelques jours954

répondre à tous(4)je répondrai

  • 某草草

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

    Parce que ce que vous définissez est un tableau clairsemé (tableau clairsemé, la longueur du tableau est supérieure au nombre d'éléments du tableau, vous pouvez utiliser in pour détecter si ses éléments du tableau existent :

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

    Et forEach ne traversera que les éléments où l'index d'origine existe.

    répondre
    0
  • 过去多啦不再A梦

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

    Y a-t-il une différence entre l'indéfini généré automatiquement ici et celui que j'ai défini ?

    C'est un piège des tableaux, cet indéfini n'est pas si indéfini que ça. Ceux générés automatiquement sont appelés "emplacements vides", et Chrome les affiche simplement comme non définis. Vous pouvez également voir que le véritable indéfini est affiché un par un et que les emplacements vides affichent les mots « indéfini × 7 ».

    forEach, la carte et autres ignoreront les emplacements vides. Veuillez vous référer à la solution

    console.log(Array.from(a))

    répondre
    0
  • 淡淡烟草味

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

    Parce que forEach est écrit comme ceci, le forEach intégré continuera lorsqu'il rencontrera undefined
    Vous pouvez écrire vous-même une version non sautée

    répondre
    0
  • 漂亮男人

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

    Vous pouvez considérer ce problème sous un autre angle :
    var a = [1,2,3,4]
    delete a[0]
    console.log(a)//[undefined × 1, 2, 3, 4]
    a.length//4
    a.forEach(it=>console.log(it))// 2 3 4
    Retour à la question, lorsque forEach est encapsulé, ce "indéfini" sera ignoré, vous pouvez réécrire Essayez cette méthode, quelle que soit la valeur, elle devrait pouvoir être imprimée normalement

    répondre
    0
  • Annulerrépondre