将未知数量的参数传递给javascript函数

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

有没有办法传递未知数量的参数:

var print_names = function(names) {
    foreach(name in names) console.log(name); // something like this
}

print_names('foo', 'bar', 'baz');

另外,如何获取传入的参数数目?

提问于
用户回答回答于

ES3(或ES5或老式的Javascript)

您可以通过magic 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);

ES6 / Typescript

var print_names = function(...names) { for (let i=0; i<names.length; i++) console.log(names[i]); }

用户回答回答于

ES6 / ES2015

利用其余参数语法

function printNames(...names) {
  console.log(`number of arguments: ${names.length}`);
  for (var name of names) {
    console.log(name);
  }
}

printNames('foo', 'bar', 'baz');

剩余参数和参数对象之间有三个主要区别:

  • 其余参数只是没有给出单独名称的参数,而参数对象包含传递给函数的所有参数;
  • 参数对象不是真正的数组,而其余参数是数组实例,这意味着像sort,map,forEach或pop等方法可以直接应用于它;
  • 参数对象具有特定于自身的附加功能(如callee属性)。

扫码关注云+社区