Javascript:函数中的可选参数[重复]

Posted

技术标签:

【中文标题】Javascript:函数中的可选参数[重复]【英文标题】:Javascript : optional parameters in function [duplicate] 【发布时间】: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)

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

【问题讨论】:

使用数组作为参数。 【参考方案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('');

【讨论】:

以上是关于Javascript:函数中的可选参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的可选参数[重复]

Python中的类/函数中的可选参数[重复]

Angular如何传递跳过一些[重复]的可选构造函数参数

JavaScript中的可选链接[重复]

PHP在函数调用期间针对特定的可选参数[重复]

Javascript函数的模板,带有作为对象传递的可选和必需参数