Außerdem wird length bei einem Array falsch gesetzt, wenn bspw. Index 2, 7 und 24 belegt werden.
var a=[];a[2]=4;a[7]=43;a[24]=0;alert(a.length); // 25
Falsch würde ich das nicht nennen, sondern das Verhalten, was ich von einem Array erwarten würde: Da gibt length immer den größten belegten Index (+1) wieder.
Von einem Hash hingegen würde man es natürlich nicht erwarten, da wäre length gleich 3. (In anderen Programmiersprachen, in JavaScript gibts das erst in ES6 mit Map.)
Mathias