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

Javascript 在ES6中使用扩展语法时使用默认参数?,javascript,parameters,ecmascript-6,default-parameters,Javascript,Parameters,Ecmascript 6,Default Parameters,我知道,在es6中定义函数时,可以使用带有参数(Rest参数)的扩展运算符语法,如下所示: function logEach(...things) { things.forEach(function(thing) { console.log(thing); }); } logEach("a", "b", "c"); // "a" // "b" // "c" 我的问题: 可以将默认参数与排列语法一起使用吗?这似乎不起作用: function logDefault(...thi

我知道,在es6中定义函数时,可以使用带有参数(Rest参数)的扩展运算符语法,如下所示:

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

JavaScript不支持rest参数的默认值

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

函数日志默认值(head=“nothing”,…tail){
[head,…tail].forEach(函数(事物){
console.log(东西);
});
}
logDefault();//“没什么”

logDefault(“a”、“b”、“c”);//a、 b,c
否,当没有参数时,rest参数将被分配一个空数组;无法为其提供默认值

你会想用

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

这有什么意义
things
将是一个包含剩余参数的数组,默认值为空数组。您不能只检查
things。length
以确定是否未传递任何内容?
…things
称为a(有些人将其描述为“聚集”)。语法与spread相同,但与spread相反。相关:。