首先看以下代码:
var fn = function(){ console.log(typeof arguments, arguments); // object [3, 4, 5, callee: function, Symbol(Symbol.iterator): function] console.log(arguments[0]); // 3 arguments.slice(0,1); // Uncaught TypeError: arguments.slice is not a function }; fn(3,4,5);
arguments打印出来,是一个长度为3的“数组”,为什么不能使用Array的slice方法呢?
实际上,arguments对象是一个类似于数组的对象,但不是数组,只有数组的长度属性,其余数组的其他属性和方法都不具有。例如其没有数组的slice方法。
但是arguments可以很方便的被转换为数组:
var arr = Array.prototype.slice.call(arguments); // 或者 var arr = [].slice.call(arguments); // 或者 var arr = Array.from(arguments);
总结:
arguments对象不是一个 Array 。它类似于数组,但除了 长度之外没有任何数组属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的数组
参考文章:
arguments