Dovrebbe essere 1.
No, dovrebbe essere 667, perché è così che length
definito per le matrici standard in JavaScript, che aren't really arrays at all. Le matrici in JavaScript sono intrinsecamente sparse, nel senso che possono avere buchi (indici in cui non è memorizzato alcun valore di alcun tipo).
Come posso contare correttamente nel modo più veloce?
L'unico modo è il looping. Per esempio:
var count = 0;
myArr.forEach(function() {
++count;
});
console.log(count);
... o via reduce
come in maček's answer. forEach
, reduce
, e altri simili visitano solo voci effettivamente esistenti, quindi ignorano i buchi negli array sparsi.
Devo dire che da quando IE8 ancora (sigh) ha un bel po 'di quota di mercato, è necessario shim forEach
e reduce
e tale su di essa, se si desidera utilizzarli. (Che è facile.)
di fare questo senza alcun spessoramento, e contare solo effettive proprietà di indice (non altri tipi di proprietà), quindi liberamente:
var count = 0, name;
for (name in myArr) {
if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) {
++count;
}
}
che utilizza una definizione leggermente allentato di ciò che un il nome della proprietà dell'indice è; se ne vuoi uno robusto, vedi la parte "Usa for-in correttamente" di this answer.
fonte
2015-08-07 16:28:11
In js numero 0 è come il numero 1 Ecco perché ottieni 667. –
http://stackoverflow.com/questions/7421013/why-does-5-6-8-71-2-8-in-javascript –