webentwicklung-frage-antwort-db.com.de

Wie übergeben Sie den Wert "undefined" an eine Funktion mit mehreren Parametern?

Ich möchte den Wert von 'undefined' an eine Funktion mit mehreren Parametern übergeben, ohne den Parameter auszulassen.

Was meine ich mit "ohne den Parameter wegzulassen". Ich meine, wir sollten den parm2 nicht einfach so weglassen, wie in diesem Beispiel:

function myFunction (parm1, parm2) {}
myFunction("abc");

Dies wird zwar parm2 undefiniert machen, aber ich darf dies nicht tun, da ich nach dem Weglassen des Parameters andere Parameter angeben muss. Die vorherige Methode funktioniert also nicht, falls ich parm1 undefined ABER möchte um nach diesem Parameter andere Parameter zu haben, die einen Wert enthalten.

Ich habe versucht, das Problem zu lösen mit:

myFunction( ,"abc"); //doesn't seem to work

Update:

und myFunction(undefined, "abc"); </ s> «das funktioniert jetzt zuverlässig.

Erwähnenswert ist jedoch Folgendes:

Das Festlegen einer Variablen auf undefined wird als schlechte Praxis betrachtet, wir sollte stattdessen null verwenden.

40
ajax333221

myFunction(undefined,"abc"); sollte so funktionieren, was ist das Problem?

siehe hier

Hier ist undefined Dokumentation von Mozilla, die von allen Browsern unterstützt wird

52
xdazz

Der void-Operator scheint der häufigste Weg zu sein, um undefined explizit abzurufen.

Sie würden es in Ihrem Beispiel so verwenden:

myFunction(void 0, "abc");

Dies ist auch eine zuverlässige Methode für den Vergleich mit undefined, das vor versehentlichem Überschreiben von undefined in älteren JavaScript-Umgebungen geschützt ist:

var x;
if (x === void 0) {
    // this will execute
}
12
bkbooth

Ein besserer Ansatz besteht darin, Object mit benannten Attributen zu übergeben und dann nach diesen bestimmten Attributwerten zu suchen. Auf diese Weise müssen Sie nicht auf die Anzahl der Argumente angewiesen sein.
Beispiel: Object.dummy

10
dbrin

Ich hatte gerade eine Idee und es scheint zu funktionieren:

var undf;

myFunction(undf, "abc");

Ich bin sicher, es gibt bessere Wege, aber ich poste dies

5
ajax333221

Sie können apply und ein Array von Parametern verwenden, um "undefined" als einen der Parameter zu übergeben. Sie wollten beispielsweise parm1 als "undefined" übergeben:

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 );
1
Edward Olamisan

Sie müssen den Funktionsaufruf mit undefined Variable im Funktionscode selbst auf eine der folgenden Arten behandeln: - 

 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

    }

Nun können Sie die obige Funktion auf folgende Weise aufrufen: - 

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
1
Nipun Madan

Verwenden Sie diese Methode, wenn Sie eine unbegrenzte Anzahl von Parametern hinzufügen möchten:

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'});
1
Aram Kocharyan

Ich denke, am nächsten kommen Sie null als Parameter. Es ist nicht undefined, aber für die meisten Fälle ist es nahe genug.

1

Wenn möglich, können Sie die Funktion als myFunction (parm2, parm1) neu anordnen. 

dh. Stellen Sie sicher, dass mögliche undefinierte Parameter zuletzt in der Funktion sind. Dies funktioniert möglicherweise nicht, wenn weitere Parameter eingeführt werden.

0
Tomy Varghese

Um nur ein Beispiel zu geben, was @dbrin erklärt hat, hätte @alphapilgrim es vielleicht möchten. 

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

    });
 
  
  }
  
 

}

0
MFAL

Ein einfacher Weg, dies zu tun, wenn es akzeptabel ist, undefiniert zu bestehen. Aber besser noch wie folgt per W3C

Javascript fehlende Argumente

function myFunction(x, y) {
if (y === undefined) {
      y = 0;
    } 
}
0
alphapilgrim

myFunction(undefined,"abc") sollte auf jeden Fall funktionieren, es sei denn, jemand hat die Variable undefined neu definiert! Wenn Sie auf Nummer sicher gehen möchten, gibt es Dutzende von Möglichkeiten, um den undefinierten Wert zu erhalten, wodurch die Annahme vermieden wird, dass das als "undefined" bezeichnete Ding tatsächlich den speziellen undefinierten Wert hat:

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 ist am weitesten verbreitet (kompiliertes CoffeeScript schließt dies ein, wo undefinierte Werte benötigt werden).

0
davidchambers