9

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");

1 Answer 1

8

It works if your object has a length property.

var myobj = { 0: "foo", 1: "bar", length: 2 };
var myobjarray = [].slice.call(myobj);
alert(myobjarray.shift());

Most Array methods rely on the length property. If you try to execute an Array method on an object that doesn't expose the expected interface, you'll get unexpected results.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.