带有可选参数的JavaScript函数

JavaScript function with optional parameters

本问题已经有最佳答案,请猛点这里访问。

我是来自Python背景的JavaScript的新手。 在Python中,参数可以作为键和值传递:

1
2
3
4
def printinfo( name, age = 35 ):
   print"Name:", name
   print"Age", age
   return;

然后可以这样调用该函数:

1
2
printinfo( age=50, name="miki" )
printinfo( name="miki" )

这些参数可以在JavaScript函数中传递吗?

我希望能够传递一个或多个参数。 例如一个JavaScript函数:

1
2
3
function plotChart(data, xlabel, ylabel, chart_type="l"){
    ...
}

我希望能够只传递数据和图表类型,标签是可选的,例如:

1
plotChart(data, chart_type="pie")

这可以用JavaScript吗?


执行此操作的一种好方法是为所有参数使用对象。就像是:

1
2
3
4
5
6
7
function plotChart(options) {
  // Set defaults
  options.chart_type = options.chart_type || '1';

  // Check if each required option is set
  // Whatever is used by the data
}

然后当调用该函数时:

1
2
3
4
5
6
plotChart({
  data: 'some data',
  xlabel: 'some xlabel',
  ylabel: 'some ylabel',
  chart_type: '5' // This is optional
});


一种方法是检查参数值是否为undefined,如果是,则分配一个值。

1
2
3
4
5
function plotChart(data, xlabel, ylabel, chart_type) {
  if (typeof chart_type === 'undefined') {
     chart_type = 'l';
  }
}

此外,EcmaScript 2016(ES6)还提供默认参数。由于某些浏览器尚不支持此功能,您可以使用诸如babel之类的转换器将代码转换为ES5。

为了使它像你的python示例一样工作,你必须传递一个包含值而不是单个参数的对象。

1
2
3
4
5
6
function plotChart(options) {
    var data = options.data;
    var xlabel = options.xlabel;
    var ylabel = options.ylabel;
    var chart_type = (typeof options.chart_type === 'undefined' ? 'l' : options.chart_type);
}

用法示例

1
2
3
4
plotChart({
  xlabel: 'my label',
  chart_type: 'pie'
});


已经有很多答案,但我没有看到我认为最简单的解决方案。

1
2
3
var myFunc = function(param1) {
    var someData = param1 ||"defaultValue";
}


您可以检查参数是否已定义,以及硬编码到您的函数中。

例如

1
2
3
4
5
6
 var preDefined = function(param) {
    if(param === undefined) {
        param = preDefinedValue
     }
     /* Rest of code goes here */
 }

ETA:

ES6允许默认参数值(当我发布答案时没有意识到这一点)。

链接