是否可以从数组向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在函数调用中设置值的情况相比,spread语法更短,更“甜” ,这就是方法。
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”显式引用内部的Global对象(窗口)或在ES模块null中使用。
null
func
还要注意,该arguments对象并不是真正的数组,可以通过以下方式将其转换:
arguments
var argsArray = Array.prototype.slice.call(arguments);
在ES6中:
const argsArray = [...arguments] // or Array.from(arguments)
但是arguments由于传播语法的原因,如今您很少直接使用该对象。