параметры по умолчанию в 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';
}
};