Учитывая, что «arguments» не является истинным массивом, почему Array.prototype.slice.call (arguments) работает, а Array.prototype.slice.call (someobject) не работает?

Если arguments - это просто объект со свойством length, то почему он, кажется, ведет себя иначе, чем другие объекты, не являющиеся массивами, в отношении, скажем, Array. prototype.slice.

Например, следующий код сначала предупреждает «undefined», а затем предупреждает «foo». Почему они различаются?

(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");
9
задан Andreas Köberle 23 June 2011 в 20:32
поделиться