Javascript跳过函数调用中的参数
Javascript skip arguments in function call
javascript初学者。
假设我有一个javascript函数,它接受3个参数:
function f(arg1, arg2, arg3) { // do stuff }
我知道我可以调用f(value1,value2);在这种情况下,函数范围内的arg1将为value1,arg2将为value2,arg3将为null。
一切都还好。然而,如果我想调用只给arg1
和arg3
赋值的函数,我需要做这样的事情:f(value1, null, value2)
;
有没有一种方法可以以更C#风格的方式指定哪些参数具有哪些值(而不将未给定的参数指定为null)?类似于这样:对于只使用arg1
和arg3
的值调用f,我将编写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})
{
...
}
https://javascript.info/destructuring-assignment
可以。可以写成:
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...
}
嘿,我也遇到过类似的问题,但我不知道它是否适用于任何上下文,也不知道它对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格式的函数中没有指定默认值,我不确定这是否有效,但它对我有效!希望这对有帮助
有了ECMAScript 6(ECMAScript2015)和默认参数的引入,可以很容易地为参数设置默认值,并将undefined
传递给skip一个参数:
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]
将此代码添加到您的函数中(对于默认值)
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
-当不存在f.call实例对象arg2属性时,此语法允许回退为false,而不是未定义。
在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"
- 具有多个参数的checkbox函数调用
- 使用评估函数调用 javascript 函数作为文本框 Asp.net 参数
- 使用onclick和javascript函数,在参数中调用js-var
- 循环变量作为异步函数调用中的参数
- 如何使用函数作为事件处理程序,以及如何使用参数直接调用函数
- 您将使用什么参数来调用此函数以获取指定的输出
- JavaScript 函数调用将 x && y 作为参数传递
- 如何使用一些变量参数从javascript函数调用 asp.net C#函数并从C#函数获取字符串返回
- 使用参数成功调用简单函数后出现意外警报,消息为“未定义”
- 不理解此函数调用中的参数
- 如果我有一个变量,分配给函数调用的值,如果函数调用的参数更改,是否可以更新该变量
- 防止单击和检索函数调用的参数
- 我可以通过beforeSent事件更改jQuery.ajax的函数调用参数(在数据中发送)吗?
- 从函数调用控制器并向其传递 URL 编码参数
- 添加参数时调用javascript函数停止工作,这真的不大声吗
- 将参数传递给事件触发器中的函数调用
- 在函数调用后将参数传递给 JavaScript 函数
- 使用来自 json 对象的参数动态调用方法/函数
- 正则表达式匹配特定的函数调用并使用 javascript 捕获参数
- 如何在函数调用中自动添加参数