javascript函数中的默认参数值

Default argument values in JavaScript functions

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

Possible Duplicate:
How do I make a default value for a parameter to a javascript function

在PHP中:

1
2
3
function func($a = 10, $b = 20){
  // if func() is called with no arguments $a will be 10 and $ b  will be 20
}

如何在JavaScript中实现这一点?

如果我试图在函数参数中赋值,我会得到一个错误。

missing ) after formal parameters


在JavaScript中,您可以不带参数地调用函数(即使它有参数)。

因此,可以添加如下默认值:

1
2
3
4
5
6
function func(a, b){
   if (typeof(a)==='undefined') a = 10;
   if (typeof(b)==='undefined') b = 20;

   //your code
}

然后可以像func();一样调用它来使用默认参数。

这是一个测试:

1
2
3
4
5
6
7
8
9
10
11
function func(a, b){
   if (typeof(a)==='undefined') a = 10;
   if (typeof(b)==='undefined') b = 20;

   alert("A:"+a+"
B:"
+b);
}
//testing
func();
func(80);
func(100,200);


ES2015:

从ES6/ES2015开始,我们在语言规范中有默认参数。所以我们可以做一些简单的事情,比如,

1
2
function A(a, b = 4, c = 5) {
}

或结合ES2015破坏,

1
2
function B({c} = {c: 2}, [d, e] = [3, 4]) {
}

详细解释如下:

https://developer.mozilla.org/en/docs/web/javascript/reference/functions/default_参数

Default function parameters allow formal parameters to be initialized with default values if no value or undefined is passed.

前ES2015:

如果要处理不是数字、字符串、布尔值、NaNnull的值,只需使用

(因此,对于您计划永远不发送null的对象、数组和函数,您可以使用)

1
param || DEFAULT_VALUE

例如,

1
2
3
function X(a) {
  a = a || function() {};
}

虽然这看起来很简单,也有点效果,但这是限制性的,而且可能是反模式的,因为||对所有错误值(""nullNaNfalse0)进行操作,这使得此方法无法将作为参数传递的错误值赋值给参数。

因此,为了只显式地处理undefined值,首选的方法是:

1
2
3
4
function C(a, b) {
  a = typeof a === 'undefined' ? DEFAULT_VALUE_A : a;
  b = typeof b === 'undefined' ? DEFAULT_VALUE_B : b;
}


必须检查参数是否未定义:

1
2
3
4
function func(a, b) {
    if (a === undefined) a ="default value";
    if (b === undefined) b ="default value";
}

还要注意,这个问题以前已经回答过。


我从来没有在javascript中看到过这样做。如果您希望函数具有可选参数,如果省略参数,则会获得指定的默认值,下面是一种方法:

1
2
3
4
5
6
7
8
9
10
11
 function(a, b) {
      if (typeof a =="undefined") {
        a = 10;
      }

      if (typeof b =="undefined") {
        a = 20;
      }

      alert("a:" + a +" b:" + b);
    }

1
2
3
4
5
6
7
8
9
function func(a, b)
{
  if (typeof a == 'undefined')
    a = 10;
  if (typeof b == 'undefined')
    b = 20;
  // do what you want ... for example
  alert(a + ',' + b);
}

速记

1
2
3
4
5
6
7
8
function func(a, b)
{
  a = (typeof a == 'undefined')?10:a;
  b = (typeof b == 'undefined')?20:b;

  // do what you want ... for example
  alert(a + ',' + b);
}


不能为函数参数添加默认值。但你可以这样做:

1
2
3
4
5
6
7
8
function tester(paramA, paramB){
 if (typeof paramA =="undefined"){
   paramA = defaultValue;
 }
 if (typeof paramB =="undefined"){
   paramB = defaultValue;
 }
}