¿Existe una mejor manera de crear parámetros de funciones opcionales en JavaScript? [duplicar]

Resuelto Mark Biek asked hace 16 años • 28 respuestas

Siempre he manejado parámetros opcionales en JavaScript de esta manera:

function myFunc(requiredArg, optionalArg){
  optionalArg = optionalArg || 'defaultValue';

  // Do stuff
}

Hay una mejor manera de hacerlo?

¿Hay algún caso en el que el uso ||así vaya a fallar?

Mark Biek avatar Sep 29 '08 21:09 Mark Biek
Aceptado

Su lógica falla si se pasa optionArg, pero se evalúa como falso; pruebe esto como alternativa

if (typeof optionalArg === 'undefined') { optionalArg = 'default'; }

O un modismo alternativo:

optionalArg = (typeof optionalArg === 'undefined') ? 'default' : optionalArg;

¡Utilice el idioma que mejor le comunique la intención!

Paul Dixon avatar Sep 29 '2008 14:09 Paul Dixon

En ECMAScript 2015 (también conocido como " ES6 ") puede declarar valores de argumento predeterminados en la declaración de función:

function myFunc(requiredArg, optionalArg = 'defaultValue') {
    // do stuff
}

Más sobre ellos en este artículo sobre MDN .

Actualmente, esto solo es compatible con Firefox , pero a medida que se complete el estándar, se espera que el soporte mejore rápidamente.


EDITAR (2019-06-12):

Los parámetros predeterminados ahora son ampliamente compatibles con los navegadores modernos. No
todas las versiones de Internet Explorer admiten esta función. Sin embargo, Chrome , Firefox y Edge actualmente lo admiten.

Lachlan Hunt avatar Feb 19 '2013 13:02 Lachlan Hunt

Considero que esta es la forma más sencilla y legible:

if (typeof myVariable === 'undefined') { myVariable = 'default'; }
//use myVariable here

La respuesta de Paul Dixon (en mi humilde opinión) es menos legible que esta, pero todo se reduce a la preferencia.

La respuesta de insin es mucho más avanzada, ¡pero mucho más útil para funciones grandes!

EDITAR 17/11/2013 9:33 pm: Creé un paquete para Node.js que facilita la "sobrecarga" de funciones (métodos) llamadas paramétricas .

trusktr avatar Nov 14 '2011 21:11 trusktr