параметры по умолчанию в 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 поддерживает параметры по умолчанию таким образом. Каков наилучший способ сделать это?

Ответ 1

Самое простое решение - сказать внутри функции

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

Таким образом, если пользователь не предоставил переменную 1, вы замените его значением по умолчанию.

В твоем случае:

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

Ответ 2

2017: узел 6 и выше включают параметры по умолчанию ES6

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

Ответ 3

См. Вопрос github. Вы можете включить параметры по умолчанию в версиях текущего узла (f.ex. 5.8.0) с помощью --harmony_default_parameters

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

[...]

Он будет включен по умолчанию в версии v6.0

Ответ 4

Вы можете использовать bind для создания новой функции, у которой уже есть набор аргументов, переданных в нее:

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

В качестве альтернативы, такие языки, как CoffeeScript, которые компилируются в JavaScript, предоставляют механизмы, которые поддерживают параметры по умолчанию без использования bind:

CoffeeScript:

fn = (bar='foo') ->

JavaScript:

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