The object has to have length
and splice
> var x = {length:2, '0':'foo', '1':'bar', splice:function(){}}
> console.log(x);
['foo', 'bar']
and FYI, the Object[0]
as the prototype is for exactly the same reason. The browser is seeing the prototype itself as an array because:
$.prototype.length == 0;
$.prototype.splice == [].splice;