[英]Javascript skip arguments in function call
javascript初学者在这里。
假设我有一个带有 3 个参数的 javascript 函数:
function f(arg1, arg2, arg3) { // do stuff }
我知道我可以调用 f(value1, value2); 在这种情况下,在函数作用域内,arg1 将为 value1,arg2 将为 value2,arg3 将为 null。
一切正常。 但是,如果我想调用只给arg1
和arg3
的函数,我需要做这样的事情: f(value1, null, value2)
;
有没有一种方法可以指定哪些参数以更具 C# 风格的方式具有哪些值(而不将未给定的参数指定为 null)? 像这样:为了调用 f 只为arg1
和arg3
f(value1, arg3 = value2);
我会写f(value1, arg3 = value2);
有任何想法吗? 干杯!
我已经看到了一种方法:
例如
function person(name,surname,age)
{
...
}
person('Xavier',null,30);
你可以这样做:
function person(paramObj)
{
var name = paramObj.name;
var surname = paramObj.surname;
var age = paramObj.age;
}
像这样调用:
person({name:'Xavier',age:30});
我认为这是您在 c# 中能够做到的最接近的事情,请记住,JS 未编译,因此您无法预测函数的参数。
编辑:
为了获得更好的语法,您可以使用 ES6 对象解构,如下所示:
function person({name, surname, age})
{
...
}
是的你可以。 可以写成:
f(arg1, undefined, arg3);
在这个调用中,参数 1 和 3 将通过,而参数 2 不会被发送。
如果你打算这样做(假设它是有效的)
f(value1, arg3 = value2)
那么参数 2 将是未定义的,所以只需传递:
f(value1, undefined, value2)
使用 JS 做到这一点的唯一方法是传递一个包含所有参数的数组。
您必须在函数中设置默认值 - 您不能在 JavaScript 中为参数定义默认值。
function foo( args ){
var arg1 = args[ 0 ] || "default_value";
var arg2 = args[ 1 ] || 0;
///etc...
}
更好的是,您可以传递一个简单的对象而不是数组,该对象允许您通过对象中的键访问参数:
function foo( params ){
var arg1 = params[ "arg1" ] || "default_value";
var arg2 = params[ "arg2" ] || 0;
///etc...
}
随着ECMAScript 6 (ECMAScript 2015) 和Default Parameters的引入,它可以像为参数设置默认值并传递undefined
以跳过参数一样简单:
function paramsTest(p1 = "p1 def", p2 = "p2 def", p3 = "p3 def") { console.log([p1, p2, p3]); } paramsTest(); // [ "p1 def", "p2 def", "p3 def"] paramsTest("p#1", "p#2"); // [ "p#1", "p#2", "p3 def"] paramsTest("p#1", undefined, null); // [ "p#1", "p2 def", null]
嘿,我有一个类似的问题,但我不知道它是否适用于任何上下文,以及它是否适用于 ES5,但在 ES6 和我的上下文中,我能够将 undefined 作为我想跳过的参数传递。
我所说的上下文的意思是,在我的情况下,我在具有 ES6 格式的函数中为该参数分配一个默认值:
const exampleFunc = (arg1 = "defaultValue",arg2) => {
console.log(arg1,arg2)
}
exampleFunc(undefined,"hello!");
//this would log to the console "defaultValue","hello!"
如果您没有在 ES6 格式的函数中分配默认值,我不确定这是否可行,但它对我有用! 希望这有帮助
将此代码添加到您的函数中(对于默认值)
function f(a, b, c)
{
a = typeof a !== 'undefined' ? a : 42;
b = typeof b !== 'undefined' ? b : 'default_b';
a = typeof c !== 'undefined' ? c : 43;
}
像这样调用函数
f(arg1 , undefined, arg3)
另一个有趣的方法是使用Function.prototype.call()
方法。 我们所要做的就是使用默认调用对象值分配参数,然后您可以自由地仅使用您想使用的参数调用该方法:
function f(arg1 = this.arg1, arg2 = this.arg2 || false, arg3 = this.arg3) { console.log([arg1, arg2, arg3]); } f.call({ arg1: 'value for arg1', arg3: 'value for arg3'}); f('value for arg1', undefined, 'value for arg3');
请注意,我将 arg2 设置为this.arg2 || false
this.arg2 || false
- 当不存在 f.call 实例对象 arg2 属性时,此语法允许回退到 false 而不是 undefined。
在 ES6 中,如果你的参数是可选的,因为它们有默认值并且你可以传递一个对象,你可以使用扩展语法:
function f(opts) {
const args = {
arg1: 'a',
arg2: 'b',
arg3: 'c',
...opts
}
const {arg1, arg2, arg3} = args
return arg1.concat(arg2, arg3)
}
f() // "abc"
f({arg1: '1', arg3: '3'}) // "1b3"
f({arg2: ' whatever '}) // "a whatever c"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.