Если уж извращаться - то можно эмулировать геттером, они вроде в ие 9+ поддерживаются уже. Примерно так, если не думать об оптимизации):
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[25] = "ccc";
alert(test.length)
alert( Array.prototype.slice.call( test, 0 ) );