Это должно быть 1.
Нет, это должно быть 667, потому что это как length
определяется для стандартных массивов в JavaScript, которые aren't really arrays at all. Массивы в JavaScript - это , по сути, редкие, что означает, что в них могут быть отверстия (индексы, в которых не хранится никакое значение).
Как я могу получить хороший счет самым быстрым способом?
Единственный способ - зацикливание. Например:
var count = 0;
myArr.forEach(function() {
++count;
});
console.log(count);
... или через reduce
как в maček's answer. forEach
, reduce
и другие подобные записи только для входа, которые фактически существуют, поэтому они пропускают отверстия в разреженных массивах.
Я должен упомянуть, что с IE8 до сих пор (Вздох) имеет справедливую часть доли на рынке, вы должны Призонная шайба forEach
и reduce
и такие на ней, если вы хотите использовать их. (Который легко.)
Чтобы сделать это без какого-либо шиммирования, и рассчитывать только фактические свойства индекса (не другие виды свойств), а затем свободно:
var count = 0, name;
for (name in myArr) {
if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) {
++count;
}
}
Это использует немного рыхлое определение того, что такое имя свойства индекса; если вы хотите получить надежный, см. раздел «Использовать для правильной» в this answer.
В Js число 0, как номер 1 Вот почему вы получаете 667. –
http://stackoverflow.com/questions/7421013/why-does-5-6-8-71-2-8-in-javascript –