Je veux passer la valeur de 'undefined' sur une fonction de paramètre multiple mais sans omettre le paramètre.
Que veux-je dire par "sans omettre le paramètre". Je veux dire que nous ne devrions pas simplement omettre le parm2
comme ceci:
function myFunction (parm1, parm2) {}
myFunction("abc");
Cela fera effectivement parm2
undefined, mais je ne suis pas autorisé à le faire de cette façon car je devrai spécifier d'autres paramètres APRÈS le paramètre omis, de sorte que la méthode précédente ne fonctionnera pas dans le cas où je veux rendre parm1
undefined avoir d'autres paramètres après celui-ci pour contenir une valeur.
J'ai essayé de résoudre le problème avec:
myFunction( ,"abc"); //doesn't seem to work
Mettre à jour:
et myFunction(undefined, "abc");
</ s> «cela fonctionne de manière fiable maintenant.
Cependant, il convient de mentionner que:
Définir une variable sur
undefined
est considéré comme une mauvaise pratique, nous devrait utilisernull
à la place.
myFunction(undefined,"abc");
de cette façon devrait fonctionner, quel est le problème?
voir ici
Voici la documentation non définie de mozilla, supportée par tous les navigateurs
L'opérateur void
semble être le moyen le plus courant d'obtenir explicitement undefined
.
Vous l'utiliseriez comme ceci dans votre exemple:
myFunction(void 0, "abc");
C'est également une méthode fiable de comparaison avec undefined
qui est protégée contre le remplacement de undefined
dans des environnements JavaScript plus anciens:
var x;
if (x === void 0) {
// this will execute
}
Une meilleure approche pourrait être de passer Object
avec des attributs nommés, puis de rechercher ces valeurs d'attributs spécifiques. De cette façon, vous ne devez pas être dépendant du nombre d'arguments.
Exemple: Object.dummy
Je viens d'avoir une idée et cela semble fonctionner:
var undf;
myFunction(undf, "abc");
Je suis sûr qu'il y a de meilleures façons, mais je poste ceci
Vous pouvez utiliser apply et un tableau de paramètres pour passer "indéfini" en tant que paramètre. Par exemple, vous vouliez passer Parm1 en tant que "non défini":
function myFunction (parm1, parm2) {
if(typeof (parm1) === "undefined"){
alert("parm1 is undefined")
}
if(typeof (parm2) === "undefined"){
alert("parm2 is undefined")
}
}
var myParameters = [undefined, "abc"];
myFunction.apply(valueForThis, myParameters );
Vous devez gérer l'appel de fonction avec une variable non définie dans le code de fonction lui-même de l'une des manières suivantes: -
function myFunction (parm1, parm2) {
if (parm1 !== undefined) {
// execute code if 1st param is undefined
}
if (parm2 !== undefined) {
// execute code if 2 param is undefined
}
// execute other part of code
}
Vous pouvez maintenant appeler la fonction ci-dessus de différentes manières: -
myFunction(undefined,"abc"); // with 1st param value not known
myFunction("cde",undefined); // with 2nd param value not known
myFunction("cde","abc"); // with both param value known
Essayez d’utiliser cette méthode si vous envisagez d’ajouter une quantité indéterminée de paramètres:
function myFunc(params) {
// Define default values
var name = 'John';
var age = '40';
// You can loop through them
for (var p in params) {
alert(p + ':' + params[p]);
}
// And read them in like this
if (typeof params.name != 'undefined') {
name = params.name;
}
if (typeof params.age != 'undefined') {
age = params.age;
}
alert(name + ' ' + age);
}
alert('test1');
myFunc({name:'Bob', age:'30'});
alert('test2');
myFunc({name:'Bob'});
Je pense que le mieux que vous aurez à faire est de passer null
en tant que paramètre. Ce n'est pas undefined
, mais dans la plupart des cas, c'est assez proche.
Si c'est possible, pourriez-vous réorganiser la fonction en tant que myFunction (parm2, parm1)
c'est à dire. essayez de vous assurer que les paramètres non définis sont les derniers dans la fonction, cela pourrait ne pas fonctionner si davantage de paramètres sont introduits.
Juste pour donner des exemples sur ce que @dbrin expliquait, et @alphapilgrim aurait peut-être voulu vérifier.
simpleFunction({params1:12, params2:"abc"}); //use expected arguments
simpleFunction({params2:"abc"}); //use only one
simpleFunction({params2:"abc", params1:12, iDoNotExist:"I will not be included"}); //use expected arguments in any order
simpleFunction(); //ignore arguments and uses defaults
simpleFunction(2123); //ignores non object arguments
function simpleFunction(someParams){
var myParams = {
params1:null,
params2:"cde" //default value for second parameter
};
simpleExtend(myParams, someParams);
console.log(myParams);
}
//to include in your utilities
function simpleExtend(currentParams, newParams){
if(typeof currentParams !== "undefined" && typeof newParams !== "undefined"){
Object.keys(newParams).forEach(function(key){
if(typeof currentParams[key] !== "undefined"){
currentParams[key] = newParams[key];
}
});
}
}
Un moyen facile de le faire, le cas échéant, consiste à passer non défini. Mais mieux encore comme suit par W3C
Arguments manquants en Javascript
function myFunction(x, y) {
if (y === undefined) {
y = 0;
}
}
myFunction(undefined,"abc")
devrait absolument fonctionner, sauf si une personne cruelle a redéfini undefined
! Si vous voulez être en sécurité, il existe des dizaines de façons d’obtenir la valeur indéfinie en évitant de supposer que la chose appelée "indéfini" a bien la valeur indéfinie spéciale:
void 0
var undef; undef
[][0]
{}.foo
// `undef` is guaranteed to have the undefined value within this closure
(function(undef){ undef }())
// this expression evaluates as undefined
(function(){}())
void 0
est le plus largement utilisé (CoffeeScript compilé l’inclut chaque fois que la valeur indéfinie est requise).