2012-10-22 5 views
35

Ich frage mich, können Sie eine Funktion mit einem Parameter erstellen, der vernachlässigt werden kann.Wie kann getestet werden, ob für eine Funktion ein Parameter bereitgestellt wird?

EX. (Das ist nicht gut Code, aber es zeigt, was ich will.)

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

Also, wenn Sie parameterTest() rufen dann wäre das Ergebnis eine Meldung „Der Parameter existiert nicht ...“. Und wenn Sie parameterTest(true) aufrufen, dann würde es "der Parameter existiert ..." zurückgeben.

Kann mir bitte jemand helfen? Ist das möglich?

+1

http://www.openjs.com/articles/optional_function_arguments.php – Jrod

+0

Die Wahl von 'bool' als Variablennamen Polyglotten –

+0

dies ziemlich verwirrend macht Es ist eine sehr alte Frage, aber scheinbar täglich angeschaut, danke für die Eingabe. Ich habe den ursprünglichen Beitrag bearbeitet, um es klarer zu machen. –

Antwort

54

Dies ist ein sehr häufiges Muster.

Sie können es testen

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

verwenden, können Sie dann Ihre Funktion mit einer dieser Formen nennen:

parameterTest(); 
parameterTest(someValue); 

Darauf achten, dass die häufige Fehler von Tests zu machen

if (!bool) { 

Weil Sie nicht in der Lage wären, einen nicht angegebenen Wert vonzu unterscheiden 0, 0 oder "".

+2

'typeof (bool)' sollte 'typeof bool' sein, oder? – Johan

+0

@Johan ziemlich sicher, dass Sie es als eine Funktion und einen Operator verwenden können. scheint in Chrom mindestens zu funktionieren – sachleen

+1

Sieht aus wie youre rechts :) https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof – Johan

6

Wenn Sie in JavaScript einen Parameter nicht angeben, wird standardmäßig verwendet.

Sie könnten es einfach selbst ausprobieren, entweder in Ihrer Browser-Konsole oder mit JSFiddle.

Sie können auf die Existenz des Parameters überprüfen, wie Sie sagen, und auf diese Weise eine Funktion schreiben, die einen Parameter verwenden kann oder nicht. Allerdings empfiehlt JavaScript Garden (eine große Ressource) in den meisten anderen Fällen weg von typeof zu bleiben, da seine Ausgabe ist fast nutzlos (siehe Tabelle results of typeof).

+1

Als Alternative bietet jquery eine Methode '$ .type', die konsistent über alle Browser hinweg funktioniert. –

+1

Dieser Link sagt typeof ist nur für diese Situation nützlich, was es gut genug für diese Frage macht. – EralpB

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

Javascript funktioniert am besten mit '===' :) – Matteo

4

beste Weg, um zu überprüfen: Wenn die param nicht undefined

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

dieparam ist auch eine Variable oder ein Funktionsname

0

ich sein könnte Ich weiß, dass das alt ist, aber das ist meine bevorzugte Methode, zu überprüfen und Standard v zuzuweisen alues ​​zu Funktionen:

function testParamFunction(param1, param2) { 
    param1 = typeof param1 === 'undefined' ? null : param1; 
    param2 = typeof param2 === 'undefined' ? 'default' : param2; 

    // exit if the required parameter is not passed 
    if (param1 === null) { 
     console.error('Required parameter was not passed'); 
     return; 
    } 

    // param2 is not mandatory and is assigned a default value so 
    // things continue as long as param1 has a value 
} 
Verwandte Themen