Aetae,
Только функция должна быть чуть посложнее - нужно отсекать дробные числа, слишком большие числа, и много чего еще:
var test = {
get length(){
var j = 0;
for(var i in this)if(!isNaN(i) && i > j) j = +i ;
return j+1
}
};
test[0] = "a";
test[1] = "bb";
test[1e100] = "ccc";
var test2 = [];
test2[0] = "a";
test2[1] = "bb";
test2[1e100] = "ccc";
alert( test.length + " | " + test2.length );