是否可以从数组向 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 中发送一个数组 作为 参数数组处理?
更新 :从 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,这就是要走的路。
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将被使用。
null
func
另请注意,该arguments对象并不是真正的数组,您可以通过以下方式对其进行转换:
arguments
var argsArray = Array.prototype.slice.call(arguments);
在 ES6 中:
const argsArray = [...arguments] // or Array.from(arguments)
arguments但是由于扩展语法,您现在很少直接使用该对象。