web-dev-qa-db-fra.com

Ignorer les paramètres de fonction facultatifs en JavaScript

Pourriez-vous, s'il vous plaît, me montrer la belle façon de sauter les paramètres facultatifs en JavaScript.

Par exemple, je veux jeter tout opt_ paramètres ici:

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
51
Dan

Solution:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})

Vous devez utiliser undefined au lieu du paramètre facultatif que vous souhaitez ignorer, car cette valeur simule à 100% la valeur par défaut des paramètres facultatifs en JavaScript.

Petit exemple:

myfunc(param);

//is equivalent to

myfunc(param, undefined, undefined, undefined);

Forte recommandation : utilisez JSON si vous avez beaucoup de paramètres, et vous pouvez avoir des paramètres optionnels au milieu de la liste des paramètres. Regardez comment cela se fait dans jQuery .

102
Dan

Réponse courte

Le pari le plus sûr est undefined, et devrait fonctionner de manière presque omniprésente. En fin de compte, cependant, vous ne pouvez pas tromper la fonction appelée en pensant que vous avez vraiment omis un paramètre.

Si vous vous penchez vers l'utilisation de null simplement parce qu'il est plus court, pensez à déclarer une variable nommée _ Comme un raccourci agréable pour undefined:

(function() { // First line of every script file
    "use strict";
    var _ = undefined; // For shorthand
    // ...
    aFunction(a, _, c);
    // ...
})(); // Last line of every script

Détails

Tout d'abord, sachez que:

  • typeof undefined Est évalué à "undefined"
  • typeof null Est évalué à "object"

Supposons donc qu'une fonction accepte un argument qu'elle s'attend à être de type "number". Si vous fournissez null comme valeur, vous lui donnez un "object". La sémantique est désactivée.1

Alors que les développeurs continuent d'écrire du code javascript de plus en plus robuste, il y a de plus en plus de chances que les fonctions que vous appelez vérifient explicitement la valeur d'un paramètre pour undefined par opposition à la classique if (aParam) {...}. Vous serez sur un terrain instable si vous continuez à utiliser null de manière interchangeable avec undefined simplement parce qu'ils se trouvent tous deux contraindre à false.

Soyez conscient, cependant, qu'il est en fait possible pour une fonction de dire si un paramètre a été réellement omis (par opposition à être défini sur undefined):

f(undefined); // Second param omitted
function f(a, b) {
    // Both a and b will evaluate to undefined when used in an expression
    console.log(a); // undefined
    console.log(b); // undefined
    // But...
    console.log("0" in arguments); // true
    console.log("1" in arguments); // false
}

notes de bas de page

  1. Bien que undefined ne soit pas non plus de type "number", Son travail consiste à être un type qui n'est pas vraiment un type. C'est pourquoi c'est la valeur assumée par les variables non initialisées et la valeur de retour par défaut pour les fonctions.
27
Doug Paul

Passez simplement null comme valeur de paramètre.

Ajouté: vous pouvez également ignorer tous les paramètres facultatifs consécutifs après le dernier que vous souhaitez transmettre la valeur réelle (dans ce cas, vous pouvez ignorer opt_timeoutInterval paramètre du tout)

5
Yuriy Rozhovetskiy