javascirpt arguments对象

首先看以下代码:

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

此条目发表在JavaScript分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注