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");
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With