Establecer un valor de parámetro predeterminado para una función de JavaScript


Answers

function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

Esto asigna a delete_after el valor de delete_after si no es un valor de falsey , de lo contrario asigna la cadena "my default here" . Para obtener más detalles, consulte la encuesta de Doug Crockford sobre el idioma y consulte la sección sobre Operadores .

Este enfoque no funciona si desea pasar un valor falsey es decir false , null , undefined , 0 o "" . Si requiere que se pasen los valores de Falsey , necesitaría usar el método en la respuesta de Tom Ritter .

Al tratar con una serie de parámetros para una función, a menudo es útil permitir que el consumidor pase los argumentos de los parámetros en un objeto y luego fusionar estos valores con un objeto que contiene los valores predeterminados para la función

function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

usar

// will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 
Question

Me gustaría que una función de JavaScript tenga argumentos opcionales en los que establezco un valor predeterminado, que se usa si el valor no está definido. En Ruby puedes hacerlo así:

def read_file(file, delete_after = false)
  # code
end

Funciona esto en JavaScript?

function read_file(file, delete_after = false) {
  // Code
}



Según la sintaxis

function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}

puede definir el valor predeterminado de los parámetros formales. y también verifique el valor indefinido mediante el uso de la función typeof .




En ECMAScript 6 realmente podrá escribir exactamente lo que tiene:

function read_file(file, delete_after = false) {
  // Code
}

Esto establecerá delete_after en false si no está presente o undefined . Puede utilizar funciones de ES6 como esta hoy con transpilers como Babel .

Vea el artículo de MDN para más información .




esa solución es trabajo para mí en js:

function read_file(file, delete_after) {
    delete_after = delete_after || false;
    // Code
}



Para cualquier persona interesada en que su código funcione en Microsoft Edge, no use valores predeterminados en los parámetros de la función.

function read_file(file, delete_after = false) {
    #code
}

En ese ejemplo, Edge arrojará un error "Esperando") '"

Para evitar este uso

function read_file(file, delete_after) {
  if(delete_after == undefined)
  {
    delete_after = false;
  }
  #code
}

A partir del 08 de agosto de 2016, esto sigue siendo un problema




Al ser un desarrollador de C ++ por mucho tiempo (Rookie to web development :)), cuando me enteré de esta situación, hice la asignación de parámetros en la definición de la función, como se menciona en la pregunta, de la siguiente manera.

function myfunc(a,b=10)

Pero ten en cuenta que no funciona de manera consistente en todos los navegadores. Para mí, funcionó en Chrome en mi escritorio, pero no funcionó en Chrome en Android. Opción más segura, como muchos han mencionado anteriormente es -

    function myfunc(a,b)
    {
    if (typeof(b)==='undefined') b = 10;
......
    }

La intención de esta respuesta no es repetir las mismas soluciones, lo que otros ya han mencionado, sino informar que la asignación de parámetros en la definición de la función puede funcionar en algunos buscadores, pero no confíe en ello.