arguments
是一个类数组对象。代表传给一个function的参数列表。
在JavaScript函数定义中,不会像Java或者C++这样强制要求指定函数的形参个数和形参的类型. JavaScript是弱类型语言,一个变量可以赋值所有类型的值.
定义函数的时候,可以根据情况传递任意实参, 因此,JavaScript的函数式没有重载的概念的. 为此,可以使用arguments
这个变量获取函数调用传递进来的参数.
例如
function test() {
//arguments
}
可以这样调用test(); 或者 test(1) 或者test(1, 2 ...)
描述
arguments
对象是函数内部的本地变量;arguments 已经不再是函数的属性了。
你可以在函数内部通过使用 arguments
对象来获取函数的所有参数。这个对象为传递给函数的每个参数建立一个条目,条目的索引号从 0 开始。例如,如果一个函数有三个参数,你可以通过以下方式获取参数:
arguments[0]
arguments[1]
arguments[2]
参数也可以被重新赋值:
arguments[1] = 'new value';
arguments
对象并不是一个真正的数组
。它类似于数组,但没有数组所特有的属性和方法,除了 length。例如,它没有 pop 方法。不过可以将其转换成数组:
var args = Array.prototype.slice.call(arguments);
不应在 arguments 对象上使用 slice 方法,这会阻碍 JavaScript 引擎的优化 (比如 V8 引擎)。作为替代,应通过遍历 arguments 对象的方式来构建一个新的数组。
如果 Array generics 可用的话,下面的代码可以作为替代:
var args = Array.slice(arguments);
arguments
对象仅在函数内部有效,在函数外部调用 arguments 对象会出现一个错误。
如果你调用一个函数,当这个函数的参数数量比它显式声明的参数数量更多的时候,你就可以使用 arguments
对象。这个技术对于参数数量是一个可变量的函数来说比较有用。 你可以用 arguments.length
来得到参数的数量,然后可以用 arguments
object 来对每个参数进行处理。 (想要得到当一个函数定义时的该函数的参数数量, 请使用 Function.length
属性。)
属性
- 指向当前执行的函数。
- 指向调用当前函数的函数。
- 指向传递给当前函数的参数数量。
arguments.callee
arguments.caller
arguments.length
例子
例子: 定义一个连接字符串的方法
这个例子定义了一个函数来连接字符串。这个函数唯一正式声明了的参数是一个字符串,该参数指定一个字符作为衔接点来连接字符串。该函数定义如下:
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
你可以传递任意数量的参数到该函数,然后该函数会将每个参数作为一个条目来创建一个列表。
// returns "red, orange, blue"
myConcat(", ", "red", "orange", "blue");
// returns "elephant; giraffe; lion; cheetah"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// returns "sage. basil. oregano. pepper. parsley"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
例子: 定义一个创建HTML列表的方法
这个例子定义了一个函数通过一个字符串来创建HTML列表。这个函数唯一正式声明了的参数是一个字符。当该参数为 "u
" 时,创建一个无序列表 (项目列表);当该参数为 "o
" 时,则创建一个有序列表 (编号列表)。该函数定义如下:
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>"; // end list
return result;
}
你可以传递任意数量的参数到该函数,然后该函数会将每个参数作为一个条目添加到第一个参数指定类型的列表当中。
var listHTML = list("u", "One", "Two", "Three");
/* listHTML is:
"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
*/