Wie teste ich, ob einer Funktion ein Parameter zur Verfügung gestellt wird?
Lesezeit: 4 Minuten
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.
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
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!
@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.
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
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
11234100cookie-checkWie teste ich, ob einer Funktion ein Parameter zur Verfügung gestellt wird?yes
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