2010-09-03 11 views
5

Ho una funzione che voglio passare un argomento a, però io voglio che di default a 0.funzione Javascript preimpostare

E 'possibile todo è simile a PHP, come:

function byMonth(export=0) { 

Molte grazie

+2

Non utilizzare 'export' come identificatore perché è una * parola riservata in futuro * e alcune implementazioni generano un' SyntaxError' quando tali parole chiave vengono utilizzate come identificatori, l'implementazione di Safari è un buon esempio. – CMS

risposta

11

Non fare questo

function byMonth(export){ 
    export = export || 0; 
    alert(export); 
} 

Edit:

La precedente versione ha un bug in silenzio, me ne vado solo come un esempio di ciò che non fare.

Il problema è, si supponga di passare la funzione l'argomento false, prenderà il valore predefinito anche se in realtà è stato chiamato con un argomento.

Tutti questi altri parametri saranno ignorati e il difetto saranno utilizzati (per JavaScript concetto di falsy)

  • Il numero zero 0
  • Una stringa vuota ""
  • NaN
  • false
  • null
  • e (ovviamente) undefined

Un modo più sicuro per verificare la presenza del parametro è:

function byMonth(export){ 
     if(export === undefined) export = 0; 
    } 

Edit 2:

La funzione precedente non è 100 % sicuro dal momento che qualcuno (probabilmente un idiota) potrebbe definire undefined facendo in modo che la funzione si comporti in modo imprevisto. Si tratta di una finale, funziona ovunque, versione a prova di proiettile:

function byMonth(export){ 
    var undefined; 
    if(export === undefined) export = 0; 
} 
+0

In realtà è meglio della risposta di @ Nick perché stai usando 'var'. –

+2

@Jacob - È definito come un parametro :) –

+0

@Nick, Sì, credo di aver paura di un override variabile globale. –

4

È possibile impostare un valore predefinito dentro, in questo modo:

function byMonth(export) { 
    export = export || 0; 
    //your code 
} 
0

Sono più di 6 anni di ritardo, ma ora con ES6, c'è un'altra soluzione. Pablo Fernandez ha detto che è possibile impostare undefined ad un valore e si dovrebbe verificare in questo modo:

function byMonth(export){ 
    var undefined; 
    if(export === undefined) export = 0; 
} 

Bene, ora si può fare questo:

function byMonth(export){ 
    if(export === void 0) export = 0; 
} 

void 0 restituisce sempre il "vero" undefined.