Arguments对象

Part 1

Arguments对象是一个类数组对象,用来表示传递给JS方法的参数:

function testArgs(a,b,c){
            console.log(arguments[0]);
            //expected output:1
            console.log(arguments[1]);
            //expected output:2
            console.log(arguments[2]);
            //expected output:3
}    
testArgs(1,2,3);

这里说的Arguments对象是类数组对象指的是它具有length属性,也就是说对象内的元素索引都是从0开始的。但是它不具备一些Array含有的内置方法,比如forEach()或Map();

Arguments是所有的(非箭头)函数中都可使用的局部变量,我们可以使用Array.from()方法或者扩展运算符把它转换成为一个数组对象:

const args = Array.from(arguments);
const args = [...arguments];

以上是ES6写法,还有另外一种性能较好的写法:

1 var args = (arguments.length == 1?[arguments[0]]:Array.apply(arguments));

判断一下arguments的长度,如果只有一个元素,那么直接强制类型转换为数组,否则使用array.apply()方法将类数组对象转换为数组对象。

但在Chrome 14 以及 Internet Explorer 9 中如果向apply方法中传入类数组对象会抛出异常。

Part 2

剩余参数和Arguments对象的区别:

  • 剩余参数只是用来表示那些没有形参对应的实参们,但是arguments表示的是传给方法的所有实参。
  • arguments对象只是一个类数组对象,但剩余参数是真正的数组实例,也就是说剩余参数具有array对象的所有内置方法(push,pop...);
  • arguments对象还有除了和数组对象相同的属性之外的其他属性,比如callee属性。

 

posted @ 2020-09-10 17:53  张馨  阅读(183)  评论(0编辑  收藏  举报