小编典典

是否可以向 JavaScript 函数发送可变数量的参数?

all

是否可以从数组向 JavaScript 函数发送可变数量的参数?

var arr = ['a','b','c']

var func = function()
{
    // debug 
    alert(arguments.length);
    //
    for(arg in arguments)
        alert(arg);
}

func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(arr); // prints 1, then 'Array'

我最近写了很多 Python 并且能够接受 varargs 并发送它们是一个很棒的模式。例如

def func(*args):
   print len(args)
   for i in args:
       print i

func('a','b','c','d'); // prints 4 which is what I want, then 'a','b','c','d'
func(*arr) // prints 4 which is what I want, then 'a','b','c','d'

是否可以在 JavaScript 中发送一个数组 作为 参数数组处理?


阅读 75

收藏
2022-07-18

共1个答案

小编典典

更新 :从 ES6 开始,您可以在调用函数时简单地使用 扩展语法:

func(...arr);

由于 ES6 也如果您希望将参数视为数组,您还可以在参数列表中使用扩展语法,例如:

function func(...args) {
  args.forEach(arg => console.log(arg))
}

const values = ['a', 'b', 'c']
func(...values)
func(1, 2, 3)

您可以将其与普通参数结合使用,例如,如果您想分别接收前两个参数,其余作为数组接收:

function func(first, second, ...theRest) {
  //...
}

也许对你有用,你可以知道一个函数需要多少个参数:

var test = function (one, two, three) {}; 
test.length == 3;

但无论如何,你可以传递任意数量的参数......

apply如果您不需要在函数调用中设置值,则扩展语法更短且“更甜” this,这就是要走的路。

这是一个应用示例,这是以前的方法:

var arr = ['a','b','c'];

function func() {
  console.log(this); // 'test'
  console.log(arguments.length); // 3

  for(var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }

};

func.apply('test', arr);

如今,我只建议apply仅在需要从数组中传递任意数量的参数 设置this值时才使用。applytake
this作为第一个参数的值,将在函数调用时使用,如果我们null在非严格代码中使用,this关键字将引用内部的全局对象(窗口)func,在严格模式下,当显式使用
‘use strict ‘ 或在 ES 模块中,null将被使用。

另请注意,该arguments对象并不是真正的数组,您可以通过以下方式对其进行转换:

var argsArray = Array.prototype.slice.call(arguments);

在 ES6 中:

const argsArray = [...arguments] // or Array.from(arguments)

arguments但是由于扩展语法,您现在很少直接使用该对象。

2022-07-18