If the arguments is just an object with a length property, then why does it seem to behave differently from other non-array objects with respect to, say, Array.prototype.slice.
For example, the following code first alerts "undefined", and then alerts "foo". Why do these differ?
(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");