una pasar parametros pagina otra funciones funcion desde datos javascript ecmascript-6 default-value spread-operator

pagina - pasar parametros a una funcion javascript desde html



¿Es posible establecer el valor del parámetro predeterminado en un parámetro de reposo? (1)

ES6 presenta un grupo de conveniente "azúcar sintáctico". Entre ellos se encuentran las capacidades de parámetros predeterminadas de las funciones de JavaScript, así como los parámetros de descanso . Estoy descubriendo que mi consola (o devTools) se queja ( es decir , arroja un error) siempre que intenta establecer un valor de parámetro predeterminado en un parámetro de reposo. He encontrado sorprendentemente pocas referencias 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 función, he construido la función de modo que funcione (es decir, sin dar al parámetro de reposo un valor predeterminado).

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 predeterminado:

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 parámetros de reposo no pueden tener un inicializador predeterminado. 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('', '')}`