javascript:函数中的可选参数

Javascript : optional parameters in function

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

假设我有这个:

1
2
3
function concatenate(a, b, c) {
    // Concatenate a, b, and c
}

我该怎么处理这些电话?

1
2
3
4
5
x = concatenate(a)

x = concatenate(a, b)

x = concatenate(a, c)

如何使我的函数知道我给它的参数?


任何未完成的论点都将是undefined

concatenate(a, c)相当于concatenate(a, b)。如果不传递第二个参数,就不能传递第三个参数;但是可以显式地传递undefined(或nullconcatenate(a, undefined, c)

在函数中,可以检查undefined并用默认值替换。

或者,可以使用对象参数来模仿关键字参数:concatenate({a: a, c: c})


只需使用arguments类数组对象:

1
2
3
4
5
6
7
function concatenate() {
  var result = '';
  for (var i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}


使用es6 rest parameters语法获取参数数组。然后简单地使用join它的项来检索连接的字符串。

1
2
3
4
5
6
7
8
9
concatenate(a);
concatenate(a, b);
concatenate(a, c);

function concatenate(...args){
  // for old browsers
  // `...args` is an equivalent of `[].slice.call(arguments);`
  return args.join('');
}

从ES6/ES2015开始,您可以像在PHP中一样执行以下操作:

1
2
3
function concatenate(a, b = false, c = false) {
    // Concatenate a, b, and c
}

对于旧版本,可以执行以下操作:

1
2
3
4
5
6
7
8
9
10
function concatenate(a, b, c) {
   if( typeof b !== 'undefined' && typeof c !== 'undefined') {
    // code when a, b and c are defined
   } else if ( typeof b !== 'undefined' && typeof c == 'undefined') {
    // code when a and b are defined
   } else {
   // code
   }

}

我相信还有更好的方法,但应该有效。