有没有办法允许 JavaScript 中的函数的“无限”变量?
例子:
load(var1, var2, var3, var4, var5, etc...)
load(var1)
有没有办法允许 JavaScript 中的函数的“无限”变量?
例子:
load(var1, var2, var3, var4, var5, etc...)
load(var1)
当然,只需使用arguments
对象。
function foo() {
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
在(大多数)最近的浏览器中,您可以使用以下语法接受可变数量的参数:
function my_log(...args) {
// args is an Array
console.log(args);
// You can pass this array as parameters to another function
console.log(...args);
}
这是一个小例子:
function foo(x, ...args) {
console.log(x, args, ...args, arguments);
}
foo('a', 'b', 'c', z='d')
=>
a
Array(3) [ "b", "c", "d" ]
b c d
Arguments
0: "a"
1: "b"
2: "c"
3: "d"
length: 4
此处的文档和更多示例:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters
另一种选择是在上下文对象中传递您的参数。
function load(context)
{
// do whatever with context.name, context.address, etc
}
并像这样使用它
load({name:'Ken',address:'secret',unused:true})
这样做的好处是您可以根据需要添加任意数量的命名参数,并且函数可以根据需要使用(或不使用)它们。
我同意 Ken 的回答是最有活力的,我喜欢更进一步。如果它是一个使用不同参数多次调用的函数 - 我使用 Ken 的设计,然后添加默认值:
function load(context) {
var defaults = {
parameter1: defaultValue1,
parameter2: defaultValue2,
...
};
var context = extend(defaults, context);
// do stuff
}
这样,如果您有很多参数但不一定需要在每次调用函数时都设置它们,您可以简单地指定非默认值。对于扩展方法,您可以使用 jQuery 的扩展方法 ( $.extend()
),自己制作或使用以下方法:
function extend() {
for (var i = 1; i < arguments.length; i++)
for (var key in arguments[i])
if (arguments[i].hasOwnProperty(key))
arguments[0][key] = arguments[i][key];
return arguments[0];
}
这会将上下文对象与默认值合并,并使用默认值填充对象中的任何未定义值。
正如 Ramast 指出的那样,最好使用 rest 参数语法。
function (a, b, ...args) {}
我只想添加 ...args 参数的一些不错的属性
- 它是一个数组,而不是像参数这样的对象。这允许您直接应用 map 或 sort 等功能。
- 它不包括所有参数,而只包括从它传递过来的参数。例如 function (a, b, ...args) 在这种情况下 args 包含参数 3 到arguments.length