有没有办法传递未知数量的参数,例如:
var print_names = function(names) {
foreach(name in names) console.log(name); // something like this
}
print_names('foo', 'bar', 'baz');
另外,如何获取传入的参数数量?
有没有办法传递未知数量的参数,例如:
var print_names = function(names) {
foreach(name in names) console.log(name); // something like this
}
print_names('foo', 'bar', 'baz');
另外,如何获取传入的参数数量?
您可以通过魔术arguments
对象访问传递给任何 JavaScript 函数的参数,其行为类似于数组。使用arguments
你的函数看起来像:
var print_names = function() {
for (var i=0; i<arguments.length; i++) console.log(arguments[i]);
}
这是需要注意的重要的arguments
是不是一个数组。MDC 有一些很好的文档:https : //developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#Using_the_arguments_object
如果你想arguments
变成一个数组,以便你可以做类似的事情.slice()
,.push()
等等,使用这样的东西:
var args = Array.prototype.slice.call(arguments);
有更好的方法!新的休息参数功能支持您:
var print_names = function(...names) {
for (let i=0; i<names.length; i++) console.log(names[i]);
}
利用其余参数语法。
function printNames(...names) {
console.log(`number of arguments: ${names.length}`);
for (var name of names) {
console.log(name);
}
}
printNames('foo', 'bar', 'baz');
其余参数和参数对象之间有三个主要区别:
var
print_names = function() {
console.log.apply( this, arguments );
};
print_names( 1, 2, 3, 4 );
function print_args() {
for(var i=0; i<arguments.length; i++)
console.log(arguments[i])
}
有一个隐藏对象传递给 JavaScript 中的每个函数,称为arguments
.
您只需使用arguments.length
来获取传递给函数的参数数量。
要遍历参数,您将使用循环:
for(var i = arguments.length; i--) {
var arg = arguments[i];
}
请注意,这arguments
不是一个真正的数组,因此如果您需要将其作为数组,您可以像这样转换它:
var args = Array.prototype.slice.call(arguments);