在 ES6 中使用默认值和扩展语法

Ang*_*ngh 5 javascript default-parameters ecmascript-6 spread-syntax

在研究 JavaScript 的功能时,我在同一函数中使用了默认参数和扩展语法。

let whatIsThis = (a, b = 2, ...c) => {
    console.log("a = " + a, "b = " + b,"c = " + c)
}

whatIsThis(a = 1, c = [2,3,4,5,6,7,8])
Run Code Online (Sandbox Code Playgroud)

运行后,我预计输出如下:

"a = 1"
"b = 2"
"c = 2,3,4,5,6,7,8"
Run Code Online (Sandbox Code Playgroud)

但我却得到了这个:

"a = 1"
"b = 2,3,4,5,6,7,8"
"c = "
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

小智 7

这是因为您无法将命名参数传递给 JavaScript 中的函数。当你执行whatIsThis(a = 1, c = [2,3,4,5,6,7,8])时,它真正的含义是whatIsThis(1, [2,3,4,5,6,7,8 ]) (因为 a = 1 语句返回 1)。

您可以做的是将默认参数移至末尾(这通常是一个很好的做法)或将您的参数包装在对象中。例如

let whatIsThis = ({a, b = 2, c}) => {
    console.log("a = " + a, "b = " + b,"c = " + c)
}

whatIsThis({a: 1, c: [2,3,4,5,6,7,8]})
Run Code Online (Sandbox Code Playgroud)