2016-02-17 17 views
19

Come si fa a impostare i parametri predefiniti in node.js?parametri predefiniti in node.js

Per esempio, diciamo che ho una funzione che normalmente simile a questa:

function(anInt, aString, cb, aBool=true){ 
    if(bool){...;}else{...;} 
    cb(); 
} 

chiamarlo sarebbe simile a questa:

function(1, 'no', function(){ 
    ... 
}, false); 

o:

function(2, 'yes', function(){ 
    ... 
}); 

Tuttavia, non sembra che node.js supporti i parametri predefiniti in questo modo. Qual è il modo migliore per compiacere sopra?

+3

Possibile duplicato di http://stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function – migg

+0

si potrebbe usare Babel e mantenere il codice originale. –

+0

Possibile duplicato di [Impostare un valore di parametro predefinito per una funzione JavaScript] (https://stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function) – mikemaccana

risposta

10

soluzione più semplice è quella di dire che all'interno della funzione

var variable1 = typeof variable1 !== 'undefined' ? variable1 : default_value; 

Quindi in questo modo, se l'utente non ha fornito variabile1, viene sostituito da un valore di default.

Nel tuo caso:

function(anInt, aString, cb, aBool) { 
    aBool = typeof aBool !== 'undefined' ? aBool : true; 
    if(bool){...;}else{...;} 
    cb(); 
} 
1

È possibile utilizzare bind per creare una nuova funzione che ha già una serie di argomenti passati in esso:

fn1 = fn.bind(fn, 1, 'no', function(){}, false); 
fn1(); 
fn2 = fn.bind(fn, 2, 'yes', function(){}); 
fn2(true); 

In alternativa, langues come CoffeeScript che compilano in JavaScript fornisce meccanismi che supportano i parametri predefiniti senza dover utilizzare bind:

CoffeeScript: 

fn = (bar='foo') -> 

JavaScript: 

fn = function(bar) { 
    if (bar == null) { 
    bar = 'foo'; 
    } 
}; 
3

Vedere le github issue. È possibile attivare i parametri di default nelle versioni nodo corrente (p.es. 5.8.0) utilizzando --harmony_default_parameters

node --harmony_default_parameters --eval "const t = function(i = 42) { return i }; console.log(t());" 

[...]

Sara 'abilitato di default in v6.0

39

2017 risposta: nodo 6 e superiore ora include parametri di default ES6

var sayMessage = function(message='This is a default message.') { 
    console.log(message); 
}