Tableau.longueur donne la longueur incorrecte

Si j'ai un tableau ayant comme objet des valeurs des indices tels que:

var a = [];
a[21] = {};
a[90] = {};
a[13] = {};
alert(a.length); //outputs 91

J'ai trouvé une solution de contournement pour obtenir la longueur réelle:

function getLength(arr) {
    return Object.keys(arr).length;
}
var a = [];
a[21] = {};
a[90] = {};
a[13] = {};
alert(getLength(a));

Mais, pourquoi est-JS donne la longueur incorrecte lorsque les objets sont stockés au hasard des indices? Il ajoute juste 1 pour le plus grand indice trouvé sur un tableau. Comme dans l'exemple ci-dessus, 90 a été le plus grand index. Il ajoute juste 1 et donne 91 en sortie. Démonstration

  • Le comportement que vous décrivez est ce qui est défini dans l'officiel de la spec. ecma-international.org/ecma-262/5.1/#sec-15.4.5.2
  • La question est: Pourquoi avez-vous des hypothèses incorrectes sur .length? Imaginez .length retourné 3 et vous avez essayé d'utiliser for boucle pour obtenir les valeurs. Vous n'auriez jamais les valeurs...
  • Merci. Ne savais pas que officiel spec comme cela existait! Je vais toujours vous référer à maintenant.
  • Je ne pouvais pas comprendre ce que vous avez dit. Je ne suis pas bonne en anglais 😛 j'ai besoin de tels indices, parce qu'ils ont facilité beaucoup dans mon script. Je pensais trouver un correctif pour .length serait bon. Tout le reste fonctionne très bien.
  • Eh bien, ça sonnait comme prévu .length pour renvoyer une valeur différente, sans doute 3. Mais si il est retourné 3 et vous parcourir le tableau avec for (var i = 0; i < arr.length; i++) et aurait accès arr[i], qui serait arr[0], etc, alors vous ne serait pas obtenir les valeurs correctes.
  • De toute façon, il semble que ce que vous voulez est en fait un objet (var a = {}), pas un tableau.
  • la version officielle est maintenant ed 6. 😉
  • Je vais avoir un moment difficile de trouver de Tableau.longueur de la documentation là-bas..... 😮
  • dans §22.1.4 Propriétés des Instances d'Array.
  • ahh façon, là-bas... lil javascript spec est en train de grandir :')
  • Avec ed 5 ECMA semblent avoir conservé autant que possible de la numérotation à partir de l'ed 3, mais cela signifiait que certaines sections étaient juste des références à d'autres sections, et le truc n'est pas nécessairement dans un ordre logique. Avec ed 6 ils semblent avoir mordu la balle, tout remettre dans l'ordre et renumérotés.
  • Je dois admettre que j'ai été surpris lorsque j'ai été confronté à ce problème , mais alors il est logique , les Tableaux Javascript sont juste des objets 🙂
  • ce qu'est un commentaire inutile. Inutilement agressif. Tu n'es pas en position de diriger les gens vers l'apprentissage des choses quand vous demandez à propos aligne verticalement divs.

InformationsquelleAutor Rex Overflow | 2015-06-26