gpt4 book ai didi

javascript - JavaScript 中的 Splat 运算符,相当于 Python 中的 *args 和 **kwargs?

转载 作者:IT老高 更新时间:2023-10-28 21:41:50 25 4
gpt4 key购买 nike

我经常使用 Python,而且我现在正在快速学习 JavaScript(或者我应该说重新学习)。所以,我想问一下,JavaScript中的*args**kwargs的等价物是什么?

最佳答案

*args 最接近的成语是

function func (a, b /*, *args*/) {
var star_args = Array.prototype.slice.call (arguments, func.length);
/* now star_args[0] is the first undeclared argument */
}

利用 Function.length 是函数定义中给出的参数数量这一事实。

你可以把它打包成一个小助手例程,比如

function get_star_args (func, args) {
return Array.prototype.slice.call (args, func.length);
}

然后做

function func (a, b /*, *args*/) {
var star_args = get_star_args (func, arguments);
/* now star_args[0] is the first undeclared argument */
}

如果您想使用语法糖,请编写一个函数,将一个函数转换为另一个使用必需参数和可选参数调用的函数,并将所需参数以及任何其他可选参数作为数组传递给 final位置:

function argsify(fn){
return function(){
var args_in = Array.prototype.slice.call (arguments); //args called with
var required = args_in.slice (0,fn.length-1); //take first n
var optional = args_in.slice (fn.length-1); //take remaining optional
var args_out = required; //args to call with
args_out.push (optional); //with optionals as array
return fn.apply (0, args_out);
};
}

如下使用:

// original function
function myfunc (a, b, star_args) {
console.log (a, b, star_args[0]); // will display 1, 2, 3
}

// argsify it
var argsified_myfunc = argsify (myfunc);

// call argsified function
argsified_myfunc (1, 2, 3);

再一次,如果您愿意让调用者将可选参数作为数组传递,那么您可以跳过所有这些废话:

myfunc (1, 2, [3]);

**kwargs 确实没有类似的解决方案,因为 JS 没有关键字参数。相反,只需要求调用者将可选参数作为对象传递:

function myfunc (a, b, starstar_kwargs) {
console.log (a, b, starstar_kwargs.x);
}

myfunc (1, 2, {x:3});

ES6 更新

为了完整起见,让我补充一点,ES6 用剩余参数特性解决了这个问题。见 Javascript - '...' meaning

关于javascript - JavaScript 中的 Splat 运算符,相当于 Python 中的 *args 和 **kwargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17380315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com