【问题标题】:Javascript : optional parameters in function [duplicate]Javascript:函数中的可选参数[重复]
【发布时间】:2017-01-01 14:47:19
【问题描述】:

假设我有这个:

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

我该如何处理这些电话?

x = concatenate(a)

x = concatenate(a, b)

x = concatenate(a, c)

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

【问题讨论】:

  • 使用数组作为参数。

标签: javascript


【解决方案1】:

任何未填充的参数都是undefined

concatenate(a, c) 等价于concatenate(a, b)。不传递第二个参数就不能传递第三个参数;但你可以明确地传递undefined(或null,我想):concatenate(a, undefined, c)

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

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

【讨论】:

  • 好的,这就是我的想法,谢谢
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    从 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
       }
    
    }
    

    我相信也有更好的方法,但应该可行。

    【讨论】:

      【解决方案4】:

      使用 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('');
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-27
        • 2021-10-20
        • 2012-06-17
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-28
        相关资源
        最近更新 更多