node.js 中的默认参数

default parameters in 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似乎不​​支持这种方式的默认参数。完成上述内容的最佳方法是什么?

最简单的解决方案是在函数内部说

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

这样一来,如果用户没有提供变量 1,您可以将其替换为默认值。

你的情况:

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

您可以使用 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';
  }
};

参见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());"

[...]

It'll be enabled by default in v6.0

2017答案:节点6及以上包含ES6默认参数

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