【问题标题】:Is having the first JavaScript parameter with default value possible? [duplicate]第一个 JavaScript 参数是否可能具有默认值? [复制]
【发布时间】:2020-11-18 14:17:08
【问题描述】:

让最后一个参数有一个默认值是很实用的,如下。

function add(x, y = 5) {
    return x + y;
}

console.log(add(3)); // results in '8'

但是,除了最后一个参数之外,是否可以使用默认值?如果是这样,您将如何调用它以使用第一个默认值但提供第二个参数?

function add(x = 5, y) {
    return x + y;
}
    
console.log(add(,3)); // doesn't work

【问题讨论】:

  • add(undefined, 3) 但也好不到哪里去。我认为有一个关于add(,3) 语法的提案,但肯定还没有。
  • 啊啊啊!杰出的。所以,我可以有几个参数,并在必要时将它们与默认值交织在一起!谢谢!!
  • This is usually a better way 如果您有很多参数,请执行此操作。拥有许多可选参数并只为最后一个参数提供值并没有多大用途。你的函数调用看起来很糟糕doSomething("param", 2, undefined, 42, "hello", undefined, true) 阅读和维护起来很烦人。
  • @Grateful undefined 可以,但是您使用这种方法的目的是什么?
  • 我会调查...

标签: javascript default-parameters


【解决方案1】:

无论其默认值如何,您仍然需要提供第一个参数。

尝试destructuring 一个参数,如下所示:

function add({ x = 5, y }) {
    return x + y;
}

console.log(add({ y: 3 })); // results in '8'

尽管如此,您仍然需要指定 y 键,但这是一种更好的做法。 ?

【讨论】:

  • 我也很喜欢这种方法。当使用很多参数时,它似乎是更方便的使用方式!谢谢。
【解决方案2】:

你仍然可以保持你的 add 函数不变,方法是使用破坏数组中的参数调用它,如下面的 sn-p

function add(x = 5, y) {
  return x + y;
}

console.log(add(...[,3]));

【讨论】:

  • 我现在正在学习“破坏”的概念,但我仍然不太明白您如何提供参数值add(...[,3])。首先,这种破坏不是只能在数组中进行吗?其次,运算符不应该在数组中,如add([..., 3])
  • @Grateful 这是spread syntax 不是解构。此外,不 - 你也可以解构对象。
  • @Grateful 你可以想象破坏一个数组就像把方括号(对象的大括号)放在一边,三点是调用扩展运算符。例如,Math.max(1,2,3)Math.max(...[1,2,3]) 是相同的。 [,3] 等于 [undefined, 3] 然后调用 add(...[,3]) 与调用 add(undefined, 3) 相同
  • 在研究了所有建议的主题之后,我想提一下其他人已经强调的内容。虽然代码本身很好,但提到的概念在技术上是不正确的。解构是一个涉及在可迭代元素被解包后赋值的过程。但是,在这种特殊情况下,没有分配正在进行。正确使用的术语是使用... 运算符的“扩展语法”。本质上,提供的数组被迭代并扩展为不同的变量。然后将这些变量作为不同的值传回,而不是数组!
猜你喜欢
  • 2010-10-09
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
相关资源
最近更新 更多