Valores de argumentos predeterminados en funciones de JavaScript [duplicado]

Resuelto Douglas Crockford asked hace 13 años • 6 respuestas

Posible duplicado:
¿Cómo puedo crear un valor predeterminado para un parámetro para una función de JavaScript?

en PHP:

function func($a = 10, $b = 20){
  // if func() is called with no arguments $a will be 10 and $ b  will be 20
}

¿Cómo puedes hacer esto en JavaScript?

Recibo un error si intento asignar valores en los argumentos de la función

falta) después de los parámetros formales

Douglas Crockford avatar Jun 27 '11 02:06 Douglas Crockford
Aceptado

En javascript puedes llamar a una función (incluso si tiene parámetros) sin parámetros.

Entonces puedes agregar valores predeterminados como este:

function func(a, b){
   if (typeof(a)==='undefined') a = 10;
   if (typeof(b)==='undefined') b = 20;

   //your code
}

y luego puedes llamarlo func();para usar los parámetros predeterminados.

Aquí tienes una prueba:

function func(a, b){
   if (typeof(a)==='undefined') a = 10;
   if (typeof(b)==='undefined') b = 20;

   alert("A: "+a+"\nB: "+b);
}
//testing
func();
func(80);
func(100,200);
Ravan Scafi avatar Jun 26 '2011 19:06 Ravan Scafi

ES2015 en adelante:

Desde ES6/ES2015, tenemos parámetros predeterminados en la especificación del idioma. Entonces podemos hacer algo simple como,

function A(a, b = 4, c = 5) {
}

o combinado con la desestructuración ES2015 ,

function B({c} = {c: 2}, [d, e] = [3, 4]) {
}

Para una explicación detallada,

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/default_parameters

Los parámetros de función predeterminados permiten inicializar parámetros formales con valores predeterminados si no se pasa ningún valor o no está definido.

Antes de ES2015:

Si va a manejar valores que NO son números, cadenas, booleanos NaN, o nullsimplemente puede usar

(Entonces, para objetos, matrices y funciones que nunca planeas enviar null, puedes usar)

param || DEFAULT_VALUE

Por ejemplo,

function X(a) {
  a = a || function() {};
}

Aunque esto parece simple y funciona un poco, es restrictivo y puede ser un antipatrón porque también ||opera con todos los valores falsos ( "", null, NaN, false, 0), lo que hace que este método sea imposible para asignar a un parámetro el valor falso pasado como argumento.

Entonces, para manejar solo undefinedvalores explícitamente, el enfoque preferido sería:

function C(a, b) {
  a = typeof a === 'undefined' ? DEFAULT_VALUE_A : a;
  b = typeof b === 'undefined' ? DEFAULT_VALUE_B : b;
}
Boopathi Rajaa avatar Jun 26 '2011 19:06 Boopathi Rajaa

Tienes que comprobar si el argumento no está definido:

function func(a, b) {
    if (a === undefined) a = "default value";
    if (b === undefined) b = "default value";
}

También tenga en cuenta que esta pregunta ya ha sido respondida antes .

jtbandes avatar Jun 26 '2011 19:06 jtbandes

Nunca lo había visto hecho de esa manera en JavaScript. Si desea una función con parámetros opcionales a los que se les asignen valores predeterminados si se omiten los parámetros, aquí le mostramos una manera de hacerlo:

 function(a, b) {
      if (typeof a == "undefined") {
        a = 10;
      }

      if (typeof b == "undefined") {
        a = 20;
      }

      alert("a: " + a + " b: " + b);
    }
tkahn avatar Jun 26 '2011 19:06 tkahn