web-dev-qa-db-ja.com

node.jsのデフォルトパラメータ

Node.jsでデフォルトパラメータを設定するにはどうすればよいですか?

たとえば、通常は次のような関数があるとします。

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

呼び出すには、次のようになります。

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

または:

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

ただし、node.jsがこの方法でデフォルトのパラメーターをサポートしているようには見えません。上記を達成する最良の方法は何ですか?

26
hownowbrowncow

最も簡単な解決策は、関数内で言うことです

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

このように、ユーザーがvariable1を指定しなかった場合、デフォルト値に置き換えます。

あなたの場合:

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

2017年の回答:ノード6以上にはES6のデフォルトパラメーターが含まれます

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

github issue を参照してください。 --harmony_default_parametersを使用して、現在のノードバージョン(f.ex. 5.8.0)でデフォルトのパラメーターを有効にできます。

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

[...]

V6.0ではデフォルトで有効になります

2
serv-inc

bind を使用して、引数のセットがすでに渡されている新しい関数を作成できます。

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

あるいは、JavaScriptにコンパイルする CoffeeScript のような言語は、bindを使用せずにデフォルトのパラメーターをサポートするメカニズムを提供します。

CoffeeScript:

fn = (bar='foo') ->

JavaScript:

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