javascript passaggio - Come verificare se un parametro è fornito a una funzione?





parametri per (6)


miglior modo per controllare: se il parametro non è indefinito

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

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

Mi stavo chiedendo, puoi creare una funzione con un parametro che può essere trascurato.

EX. (questo non è un 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() il risultato sarà un messaggio "Il parametro non esiste ...". E se chiami parameterTest(true) , restituirebbe "il parametro esiste ...".

Qualcuno può aiutarmi? È possibile?




Questo è uno schema molto frequente.

Puoi testarlo usando

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

Puoi quindi chiamare la tua funzione con una di queste forme:

 parameterTest();
 parameterTest(someValue);

Fai attenzione a non fare il frequente errore di test

if (!bool) {

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




In JavaScript, se si trascura di fornire un parametro, esso verrà predefinito in undefined .

Puoi provarlo da solo abbastanza facilmente, sia nella tua console del browser che usando JSFiddle .

Puoi verificare l'esistenza del parametro, come dici tu, e in quel modo scrivere una funzione che possa usare 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 dei risultati di typeof ).




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



So che questo è vecchio, ma questo è il mio modo preferito per controllare e assegnare valori predefiniti alle 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
}



Invece di usare snippet di codice trovati qui e là sul web, puoi anche usare una libreria ben testata e documentata. Due opzioni che consiglierei:

1a opzione: usa Lodash : ha un metodo includes :

_.includes('foobar', 'ob');
// → true

Lodash è la dipendenza della libreria javascript più popolare per npm e ha un sacco di utili metodi di utilità javascript. Quindi per molti progetti lo vorresti comunque ;-)

Seconda opzione: Oppure usa Underscore.string : ha un metodo include :

_.str.include('foobar', 'ob');
// → true

Ecco la descrizione di Underscore.string, aggiunge solo 9kb ma offre tutti i vantaggi di una libreria ben collaudata e documentata su frammenti di codice copy'n'paste:

Underscore.string è una libreria JavaScript per una comoda manipolazione con le stringhe, estensione per Underscore.js ispirata a Prototype.js, Right.js, Underscore e bellissimo linguaggio Ruby.

Underscore.string offre diverse funzioni utili: capitalizza, pulisci, include, conta, escapeHTML, unescapeHTML, insert, splice, startsWith, endsWith, titleize, trim, truncate e così via.

Nota bene, Underscore.string è influenzato da Underscore.js ma può essere utilizzato senza di esso.

Ultimo non meno: con la versione JavaScript ES6 arriva un metodo incorporato includes :

'foobar'.includes('ob');
// → true

La maggior parte dei browser moderni lo supportano già, hanno un occhio sulla tabella di compatibilità ES6 .





javascript function