2638 votes

Définir une valeur de paramètre par défaut pour une fonction JavaScript

Double Possible:
Est-il une meilleure façon de faire en option paramètres de la fonction en Javascript?

Je voudrais une fonction JavaScript pour avoir des arguments optionnels qui-je définir une valeur par défaut, qui est utilisé si la valeur n'est pas définie. En ruby, vous pouvez le faire comme ceci:

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

Cela fonctionne en JavaScript?

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

3552voto

Tom Ritter Points 44352

Il y a beaucoup de façons, mais c'est ma méthode préférée - il vous permet de vous passer de tout ce que vous voulez, y compris false ou null. (typeof null == "object")

 function foo(a, b)
 {
   a = typeof a !== 'undefined' ? a : 42;
   b = typeof b !== 'undefined' ? b : 'default_b';
   ...
 }

633voto

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

Il attribue à l' delete_after la valeur de delete_after si ce n'est pas un falsey valeur sinon il affecte la chaîne "my default here". Pour plus de détails, consultez Doug Crockford de l'enquête de la langue et consultez la section sur les Opérateurs.

Cette approche ne fonctionne pas si vous voulez passer une falsey valeur c'est à dire false, null, undefined, 0 ou "". Si vous avez besoin d' falsey valeurs à transmettre dans vous devez utiliser la méthode dans Tom Ritter réponse.

Lorsque vous traitez avec un certain nombre de paramètres à une fonction, il est souvent utile de permettre au consommateur de passer le paramètre arguments dans un objet et de fusionner ces valeurs avec un objet qui contient les valeurs par défaut pour la fonction

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;
};

pour utiliser

// 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" }); 

158voto

tj111 Points 12313

J'ai trouver quelque chose de simple comme cela pour être plus concis et lisible personnellement.

function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X