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?

Author: hownowbrowncow, 2016-02-17

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();
}
 9
Author: Zakkery,
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);
}
 56
Author: mikemaccana,
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

 2
Author: serv-inc,
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';
  }
};
 0
Author: Wex,
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