Si los argumentos son solo un objeto con una propiedad de longitud, entonces ¿por qué parece comportarse de manera diferente a otros objetos que no son de matriz con respecto a, digamos, Array.prototype.slice?Dado que "argumentos" no es una matriz verdadera, ¿por qué funciona Array.prototype.slice.call (arguments), pero Array.prototype.slice.call (someobject) no funciona?
Por ejemplo, el siguiente código primero alerta "indefinido", y luego alerta "foo". ¿Por qué difieren?
(function(a){
var myobj = {0 : "foo"};
var myobjarray = Array.prototype.slice.call(myobj);
var argumentsarray = Array.prototype.slice.call(arguments);
alert(myobjarray.shift());
alert(argumentsarray.shift());
})("foo");