Wie teste ich, ob einer Funktion ein Parameter zur Verfügung gestellt wird?

Lesezeit: 4 Minuten

Benutzer-Avatar
Guido Visser

Ich habe mich gefragt, ob Sie eine Funktion mit einem optionalen Parameter erstellen können.

Beispiel:

function parameterTest(test)
{
   if exists(test)
   {
     alert('the parameter exists...');
   }
   else
   {
     alert('The parameter doesn\'t exist...');
   }
}

Also wenn du anrufst parameterTest() dann wäre das Ergebnis eine Meldung “Der Parameter existiert nicht…”. Und wenn Sie anrufen parameterTest(true) dann würde es “der Parameter existiert …” zurückgeben.

Ist das möglich?

  • openjs.com/articles/optional_function_arguments.php

    – Jrod

    22. Oktober 2012 um 20:53 Uhr

  • Es ist eine sehr alte Frage, die aber anscheinend täglich angezeigt wird, danke für den Beitrag. Ich habe den ursprünglichen Beitrag bearbeitet, um es klarer zu machen.

    – Guido Visser

    9. November 2016 um 11:08 Uhr

  • Ich denke, die reale Situation ist, wie man Argumente einer Funktion überprüft. controller, service, model Schicht. Es müssen viele Argumente geprüft werden.

    – Diashowp2

    15. Februar 2019 um 4:33 Uhr

Benutzer-Avatar
Denys Séguret

Dies ist ein sehr häufiges Muster.

Sie können es mit testen

function parameterTest(bool) {
  if (bool !== undefined) {

Sie können Ihre Funktion dann mit einem dieser Formulare aufrufen:

 parameterTest();
 parameterTest(someValue);

Achten Sie darauf, nicht den häufigen Fehler des Testens zu machen

if (!bool) {

Weil Sie nicht in der Lage wären, einen nicht bereitgestellten Wert von zu unterscheiden false, 0 oder "".

  • -1 für das Vorschlagen von === undefined – versuchen Sie var undefined = true vor Ihrem Code und sehen Sie, was passiert … die richtige Überprüfung wäre typeof book === ‘undefined’

    – Greif

    9. Oktober 2014 um 12:25 Uhr

  • @griffin falls jemand schreibt var undefined in ihrem Kodex verdienen sie zu leiden. window.undefined ist aus dem gleichen Grund nicht beschreibbar window.infinity und window.NaN sind – sie sollen verwendet werden, um ihre jeweiligen Werte darzustellen, die durch die Spezifikation definiert sind.

    – John Dvorak

    10. Oktober 2014 um 9:40 Uhr

  • @griffin Du hast vollkommen Recht. Wir sollten aufhören zu konsumieren undefined, es kann sich jeden Moment ändern! Könnte auch aufhören zu benutzen Object und Datejemand könnte diese manipuliert haben, und Sie sollten niemals vertrauen document.createElementes könnte überschrieben werden!

    – Zirak

    10. Oktober 2014 um 9:41 Uhr

  • @griffin Absolut, undefined ist eine lokale Variable. Deshalb es ist eine Eigenschaft des globalen Objektsund offensichtlich Object kann nicht überschrieben werden

    – Zirak

    10. Oktober 2014 um 9:46 Uhr

  • @griffin kurz: undefined hat genau den gleichen Status wie Object: Es ist eine nicht beschreibbare (seit ES5) Eigenschaft des globalen Objekts, definiert durch die Spezifikation, und wenn Sie es schattieren, ist es Ihre Schuld. Es gibt keinen Grund, das eine zu verwenden, aber nicht das andere. Wenn die Seite, für die Sie Benutzerskripte verwenden, das eine oder andere neu definiert, Greasemonkey still schützt Sie davor, indem es für jedes Benutzerskript einen separaten globalen Geltungsbereich bereitstellt.

    – John Dvorak

    10. Oktober 2014 um 9:52 Uhr

function parameterTest(bool)
{
   if(typeof bool !== 'undefined')
   {
     alert('the parameter exists...');
   }
   else
   {
     alert('The parameter doesn\'t exist...');
   }
}

Benutzer-Avatar
Johanna Larson

Wenn Sie es in JavaScript versäumen, einen Parameter anzugeben, wird dieser standardmäßig verwendet undefined.

Sie könnten es ganz einfach selbst ausprobieren, entweder in Ihrer Browserkonsole oder mit JSFiddle.

Sie können überprüfen, ob der Parameter vorhanden ist, wie Sie sagen, und auf diese Weise eine Funktion schreiben, die einen Parameter verwenden kann oder nicht. Jedoch, JavaScript-Garten (eine großartige Ressource) empfiehlt, sich fernzuhalten typeof in den meisten anderen Fällen, da seine Ausgabe so gut wie nutzlos ist (sehen Sie sich die Tabelle von Ergebnisse von typeof).

  • Als Alternative bietet jquery eine $.type Methode, die in allen Browsern konsistent funktioniert.

    – Kevin B

    22. Oktober 2012 um 21:04 Uhr

  • Dieser Link besagt, dass typeof NUR für diese Situation nützlich ist, was es für diese Frage gut genug macht.

    – EralpB

    24. Februar 2014 um 16:21 Uhr

am besten prüfen: ob die Parameter ist nicht nicht definiert

function parameterTest(param) {
    if (param !== undefined)
    ...

das Parameter könnte auch eine Variable oder ein Funktionsname sein

Benutzer-Avatar
Mann

function parameterTest(p) {
    if ( p === undefined)
        alert('The parameter doesn\'t exist...');
    else
        alert('the parameter exists...');
}

Standardwerte initieren, falls nicht vorhanden:

function loadDialog(fn, f, local, anim) {
  switch (arguments.length) {  
    case 1: f=null;
    case 2: local=false;
    case 3: anim=false;
  }
  ...
}

Keine dieser Antworten hat es für mich getan. Ich musste kennt ob jemand den Parameter verwendet hatte oder nicht. Wenn jemand die Funktion übergeben aufgerufen hat undefined Ich wollte das so behandeln, als würden sie diesen Wert als Parameter verwenden. Jedenfalls war die Lösung mit etwas modernem JS recht einfach:

function parameterTest(...test) {
  if (test.length) {
    return `exists`;
  } else {
    return `not exists`;
  }
}

parameterTest(123);         // exists
parameterTest(undefined);   // exists
parameterTest();            // not exists
parameterTest(window.blah); // exists

Für ältere Browser können Sie Argumente verwenden:

function parameterTest() {
  if (arguments.length) {
    return "exists";
  } else {
    return "not exists";
  }
}

  • Die gleiche Antwort wurde bereits hinzugefügt. Du hast das Problem aber besser erklärt.

    – Kevin Beal

    14. Juli 2021 um 15:17 Uhr

  • Vielen Dank! Zwanzig Antworten des Ignorierens undefined und dann das. +1 für eine allgemeine Lösung und für nicht Förderung der alten Kunst der arguments Pseudo-Array.

    – Silvio Mayolo

    29. Januar um 18:02 Uhr

1123410cookie-checkWie teste ich, ob einer Funktion ein Parameter zur Verfügung gestellt wird?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy