在ES6中使用扩展语法时使用默认参数?

时间:2016-10-18 21:44:48

标签: javascript parameters ecmascript-6 default-parameters

据我所知,在es6中定义一个函数时,可以使用spread operator 语法和参数(Rest Parameters),如下所示:

function logEach(...things) {
  things.forEach(function(thing) {
    console.log(thing);
  });
}

logEach("a", "b", "c");
// "a" // "b" // "c" 

我的问题:

您可以使用默认参数和传播语法吗?这似乎不起作用:

function logDefault(...things = 'nothing to Log'){
  things.forEach(function(thing) {
    console.log(thing);
  });
}
//Error: Unexpected token = 
// Note: Using Babel

2 个答案:

答案 0 :(得分:2)

JavaScript不支持rest参数的默认值。

您可以拆分参数并在函数体中合并它们的值:

function logDefault(head = "nothing", ...tail) {
  [head, ...tail].forEach(function(thing) {
    console.log(thing);
  });
}

logDefault(); // "nothing"
logDefault("a", "b", "c"); // a, b, c

答案 1 :(得分:2)

不,当没有参数时,rest参数被赋予一个空数组;没有办法为它提供默认值。

您想要使用

function logEach(...things) {
  for (const thing of (things.length ? things : ['nothing to Log'])) {
    console.log(thing);
  }
}