关于arguments的用法

描述

arguments是一个类数组Array-like对象,代表传给一个函数function的参数列表。
arguments对象是函数内部的本地变量local variable,你可以在函数内部通过arguments对象来获取函数的所有参数,它为传递给函数的每一个参数都建立一个条目,条目的索引从0开始。
例如:一个函数如果有三个参数,那么你可以通过下面这种方式去获取:

1
2
3
4
function test(){
console.log(arguments[0],arguments[1],arguments[2]);
}
test(3,4,5); //结果 3 4 5

而且,参数也可以被重新赋值:

1
2
3
4
5
function test(){
arguments[0] = 10;
console.log(arguments[0],arguments[1],arguments[2]);
}
test(3,4,5); //结果 10 4 5

注意arguments对象并不是一个真正的数组Array,它类似数组,除了length属性,它没有数组的其它任何方法method,不过可以通过下面这个方法把它转化成数组:

1
var args = Array.prototype.slice.call(arguments);

当然,在ECMAScript 2015 中,也有新的方法转化它:

1
2
var args = Array.from(arguments);
var args = [...arguments];

例子

定义一个连接字符串的方法

1
2
3
4
5
6
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments,1);
return args.join(separator);
}
myConcat("?",1,2,3,4); //结果1?2?3?4
myConcat("@",5,6,7,8); //结果5@6@7@8

定义一个创建HTML列表的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function list(type) {
var result = "<" + type + "l><li>";
var args = Array.prototype.slice.call(arguments, 1);
result += args.join("</li><li>");
result += "</li></" + type + "l>";
return result;
}
var listHTML = list("u", "One", "Two", "Three");
/* listHTML is:
"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
*/