2012-10-22 17 views
35

Mi chiedevo, puoi creare una funzione con un parametro che può essere trascurato.Come verificare se un parametro è fornito a una funzione?

EX. (Questo non è buon codice, ma mostra quello che voglio.)

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

Quindi, se si chiama parameterTest() allora il risultato sarebbe un messaggio "Il parametro non esiste ...". E se chiami parameterTest(true) allora restituirebbe "il parametro esiste ...".

Qualcuno può aiutarmi? È possibile?

+1

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

+0

La scelta di 'bool' come nome di variabile rende molto confusa per poliglotti –

+0

Si tratta di una domanda molto antica, ma apparentemente visto ogni giorno, grazie per l'input. Ho modificato il post originale per renderlo più chiaro. –

risposta

54

Questo è uno schema molto frequente.

È possibile verificare utilizzando

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

È quindi possibile chiamare la funzione con una di quelle forme:

parameterTest(); 
parameterTest(someValue); 

Fare attenzione a non commettere l'errore frequente di test

if (!bool) { 

Perché non si è in grado di differenziare un valore non approvato da false, 0 o "".

+2

'typeof (bool)' dovrebbe essere 'typeof bool', giusto? – Johan

+0

@ Johan abbastanza sicuro che tu possa usarlo come una funzione e un operatore. sembra funzionare in chrome almeno – sachleen

+1

Sembra che tu abbia ragione :) https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof – Johan

6

In JavaScript, se si trascura di fornire un parametro, verrà impostato su undefined.

Puoi provarlo da solo abbastanza facilmente, nella tua console del browser o utilizzando JSFiddle.

È possibile verificare l'esistenza del parametro, come dici tu, e in questo modo scrivere una funzione che può utilizzare un parametro o meno. Tuttavia, JavaScript Garden (una grande risorsa) raccomanda di stare lontano da typeof nella maggior parte degli altri casi, in quanto il suo output è praticamente inutile (controlla la tabella di results of typeof).

+1

In alternativa, jquery fornisce un metodo '$ .type' che funziona in modo coerente tra i vari browser. –

+1

Questo link dice che typeof è SOLO utile per questa situazione, il che lo rende abbastanza buono per questa domanda. – 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 funziona meglio con '===' :) – Matteo

4

modo migliore per verificare: se il param non è definito

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

il param potrebbe essere anche una variabile o un nome di funzione

0

I so che questo è vecchio, ma questo è il mio modo preferito per controllare, e assegnare v di default alori a funzioni:

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 
} 
Problemi correlati