parámetros predeterminados en el nodo.js
Cómo se establecen los parámetros predeterminados en el nodo.js?
Por ejemplo, digamos que tengo una función que normalmente este aspecto:
function(anInt, aString, cb, aBool=true){
if(bool){...;}else{...;}
cb();
}
Para llamarlo se vería algo como esto:
function(1, 'no', function(){
...
}, false);
O:
function(2, 'yes', function(){
...
});
Sin embargo, no parece ese nodo.js soporta parámetros predeterminados de esta manera. ¿Cuál es la mejor manera de acomplejar arriba?
4 answers
La solución más simple es decir dentro de la función
var variable1 = typeof variable1 !== 'undefined' ? variable1 : default_value;
Así que de esta manera, si el usuario no suministró variable1, lo reemplaza con el valor predeterminado.
En su caso:
function(anInt, aString, cb, aBool) {
aBool = typeof aBool !== 'undefined' ? aBool : true;
if(bool){...;}else{...;}
cb();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-17 17:47:23
2017 respuesta: el nodo 6 y superior incluyen los parámetros predeterminados de ES6
var sayMessage = function(message='This is a default message.') {
console.log(message);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 12:00:32
Ver el problema de github . Puede habilitar los parámetros predeterminados en las versiones de nodo actuales(p. ej. 5.8.0) utilizando --harmony_default_parameters
node --harmony_default_parameters --eval "const t = function(i = 42) { return i }; console.log(t());"
[...]
Estará habilitado por defecto en la v6.0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-09 16:48:48
Puede utilizar bind
para crear una nueva función que ya tiene un conjunto de argumentos pasados en ella:
fn1 = fn.bind(fn, 1, 'no', function(){}, false);
fn1();
fn2 = fn.bind(fn, 2, 'yes', function(){});
fn2(true);
Alternativamente, langues como CoffeeScript que se compilan en JavaScript proporcionan mecanismos que soportan parámetros predeterminados sin tener que usar bind
:
CoffeeScript:
fn = (bar='foo') ->
JavaScript:
fn = function(bar) {
if (bar == null) {
bar = 'foo';
}
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-17 18:17:03