JavaScript:函数中的可选参数。

3
假设我有以下代码:
function concatenate(a, b, c) {
    // Concatenate a, b, and c
}

我该如何处理这些电话呢?

x = concatenate(a)

x = concatenate(a, b)

x = concatenate(a, c)

如何使我的函数意识到我给它的参数?


1
使用数组作为参数。 - CloudPotato
4个回答

7
任何未填参数将为 undefinedconcatenate(a, c) 等同于 concatenate(a, b)。您不能传递第三个参数而不传递第二个参数;但您可以显式地传递 undefined(或者 null,我猜):concatenate(a, undefined, c)
在函数中,您可以检查 undefined 并替换为默认值。
或者,您可以使用对象参数来模拟关键字参数:concatenate({a: a, c: c})

好的,这就是我想的,谢谢。 - user4676340

3

只需使用类似数组的arguments对象:

function concatenate() {
  var result = '';
  for (var i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}

2

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

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

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

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
   }

}

我相信也有更好的方法,但这个应该有效。


2
使用 ES6 的 rest parameters 语法获取参数数组。然后简单地使用 join 将其项连接起来以检索连接的字符串。
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('');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接