¿Es posible establecer el valor del parámetro pnetworkingeterminado en un parámetro de reposo?

ES6 presenta un grupo de conveniente "azúcar sintáctico". Entre ellos se encuentran las capacidades de parameters pnetworkingeterminadas de las funciones de JavaScript, así como los parameters de descanso . Estoy descubriendo que mi console (o devTools) se queja ( es decir , arroja un error) siempre que intenta establecer un valor de parámetro pnetworkingeterminado en un parámetro de reposo. He encontrado sorprendentemente pocas references a este tema en particular en otro lugar y me pregunto si 1.) es posible hacerlo y 2.) ¿por qué no? (Asumiendo que no es posible).

Como ejemplo, he ideado un ejemplo trivial (pero, afortunadamente, todavía útil). En esta primera iteración de la function, he construido la function de modo que funcione (es decir, sin dar al parámetro de reposo un valor pnetworkingeterminado).

const describePerson = (name, ...traits) => `Hi, ${name}! You are ${traits.join(', ')}`; describePerson('John Doe', 'the prototypical placeholder person'); // => "Hi, John Doe! You are the prototypical placeholder person" 

Sin embargo, ahora con el valor pnetworkingeterminado:

 const describePerson = (name, ...traits = ['a nondescript individual']) => `Hi, ${name}! You are ${traits.join(', ')}`; describePerson('John Doe'); // => Uncaught SyntaxError: Unexpected token = 

Cualquier ayuda es muy apreciada.

No, los parameters de reposo no pueden tener un inicializador pnetworkingeterminado. La gramática no lo permite porque el inicializador nunca se ejecutará; al parámetro siempre se le asigna un valor de matriz (pero posiblemente uno vacío).

Lo que quieras hacer se puede lograr con cualquiera

 function describePerson(name, ...traits) { if (traits.length == 0) traits[0] = 'a nondescript individual'; return `Hi, ${name}! You are ${traits.join(', ')}`; } 

o

 function describePerson(name, firstTrait = 'a nondescript individual', ...traits) { traits.unshift(firstTrait); return `Hi, ${name}! You are ${traits.join(', ')}`; } // the same thing with spread syntax: const describePerson = (name, firstTrait = 'a nondescript individual', ...otherTraits) => `Hi, ${name}! You are ${[firstTrait, ...otherTraits].join(', ')}`