JavaScript函数-跳过可选参数时出现命名参数问题

时间:2019-06-30 18:23:20

标签: javascript named-parameters

如果在浏览器的控制台中运行以下代码:

function named_param(a, b=null, c=5) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

收到的输出是:

a=3
b=10
c=5

我正在寻找的输出是:

a=3
b=null
c=10

我看到了以下两个URL,并尝试了一些解决方法,但没有成功

Javascript Function Parameters Not Working

Named parameters in javascript

让我知道我在这里做错的步骤。尝试了以下代码,但没有用: 答:

function named_param(a, {b=null, c=5}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

B:

function named_param(a, {b=null, c=5}={}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3, c=10)

4 个答案:

答案 0 :(得分:1)

您可以在两者之间跳过参数,所以当您通过

named_param(3, c=10)
            |   |_____________ considered as `b`
            |_________________ considered as `a`

您可以使用对象和解构

function named({a,b=null,c=3} = {}){
  console.log('a-->',a)
  console.log('b-->',b)
  console.log('c-->',c)
}

named({a:1,c:2})
named()
named({c:2})

答案 1 :(得分:1)

使用解构解决方案时,必须传递实际对象。 named_param(3, c=10)完全是无效的语法(嗯,它是有效的,但这是对全局c变量的赋值,该变量作为第二个参数传递-没有命名)。

function named_param(a, {b=null, c=5}={}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param(3)
named_param(3, {b:"hi"})
named_param(3, {c:10})
named_param(3, {b:"hi", c:10})

答案 2 :(得分:0)

您可以做的事情是使用诸如以下的解构对象:

function named_params({a = 4, b = null, c = 5} = {a:1, b: 2, c:3}) { console.log(a,b,c) }

然后,您的函数的调用将是:

named_params({a: 3, c:10})

答案 3 :(得分:-1)

嗯,这不是问题,只是您尝试使用根本不支持它们的命名参数。

要满足您的需求,您应该这样做:

function named_param({a, b, c}) {
  console.log("a="+a);
  console.log("b="+b);
  console.log("c="+c);
}

named_param({a:5, c:9}); 
// Output:
// a=5
// b=undefined
// c=9

起初,我误解了您的问题,并提出将解构分配与arguments对象一起使用。