Javascript在函数调用中跳过参数

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#的方式指定哪些参数具

这里是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)

有什么想法吗? 干杯

如果你打算这么做(假设它是有效的)

那么参数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”