Javascript在函数调用中跳过参数
这里是javascript初学者 假设我有一个javascript函数,它有3个参数:Javascript在函数调用中跳过参数,javascript,Javascript,这里是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#的方式指定哪些参数具
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)代码>
有什么想法吗?
干杯 如果你打算这么做(假设它是有效的)
那么参数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...
}
将此代码添加到函数中(对于默认值)
像这样调用函数
f(arg1 , undefined, arg3)
我看到了一种方法:
比如说
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});
function person({name, surname, age})
{
...
}
我认为这是最接近c语言的一次了,因为JS是未编译的,所以无法预测函数的参数
编辑:
为了获得更好的语法,您可以使用ES6对象分解,如下所示:
person({name:'Xavier',age:30});
function person({name, surname, age})
{
...
}
是的,你可以。它可以写成:
f(arg1,未定义,arg3);
在这个调用中,参数1和3将通过,参数2将不被发送。嘿,我有一个类似的问题,但我不知道它是否适用于任何上下文,它是否适用于ES5,但在ES6和我的上下文中,我可以只传递未定义的参数作为我要跳过的参数
我所说的上下文是指,在我的例子中,我在ES6格式的函数中为该参数指定了一个默认值:
const exampleFunc = (arg1 = "defaultValue",arg2) => {
console.log(arg1,arg2)
}
exampleFunc(undefined,"hello!");
//this would log to the console "defaultValue","hello!"
如果没有在ES6格式的函数中指定默认值,我不确定这是否有效,但它对我有效!希望这有帮助另一个有趣的方法是使用函数.prototype.call()
方法。我们所要做的就是使用默认的调用对象值分配参数,然后您可以自由地仅使用您想要使用的参数调用该方法:
函数f(arg1=this.arg1,arg2=this.arg2 | | false,arg3=this.arg3){
log([arg1,arg2,arg3]);
}
f、 调用({arg1:'arg1'的值',arg3:'arg3'的值'});
f(“arg1的值”,未定义,“arg3的值”)代码>通过ECMAScript 6(ECMAScript 2015)和的引入,可以轻松地为参数设置默认值并传递未定义的跳过参数:
函数参数测试(p1=“p1 def”,p2=“p2 def”,p3=“p3 def”){
console.log([p1,p2,p3]);
}
paramsTest();//[“p1 def”、“p2 def”、“p3 def”]
参数(“p#1”、“p#2”)//[“第1页”、“第2页”、“第3页定义”]
paramsTest(“p#1”,未定义,null);//[“p#1”,“p2 def”,null]
在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"
否,但您可以传递2个参数并检查将发送的latterargument 2的类型,它的值为“undefined”