如何在javascript中声明可选的函数参数?

How can I declare optional function parameters in Javascript?

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

Possible Duplicate:
Is there a better way to do optional function parameters in Javascript?

我能像这样声明默认参数吗

1
2
3
4
function myFunc( a, b=0)
{
  // b is my optional parameter
}

在JavaScript中。


ES6:这是语言的一部分:

1
2
3
function myFunc(a, b = 0) {
   // function body
}

请记住,ES6检查的值与undefined相反,而不是与真实性(因此只有真正的未定义值得到默认值-错误的值,如空将不会默认)。

用ES5:

1
2
3
4
5
function myFunc(a,b) {
  b = b || 0;

  // b will be set either to b or to 0.
}

只要您明确传递的所有值都是真实的,这就有效。根据微神的评论,不真实的价值观:以东记(1)

在函数实际启动之前,通常会看到JavaScript库对可选输入进行一系列检查。


更新

使用ES6,这完全可以按照您描述的方式实现;详细描述可以在文档中找到。

旧答案

javascript中的默认参数主要有两种实现方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function myfunc(a, b)
{
    // use this if you specifically want to know if b was passed
    if (b === undefined) {
        // b was not passed
    }
    // use this if you know that a truthy value comparison will be enough
    if (b) {
        // b was passed and has truthy value
    } else {
        // b was not passed or has falsy value
    }
    // use this to set b to a default value (using truthy comparison)
    b = b ||"default value";
}

表达式b ||"default value"评估b的值和存在性,如果b不存在或不稳定,则返回"default value"的值。

替代声明:

1
2
3
4
5
6
7
8
9
10
11
function myfunc(a)
{
    var b;

    // use this to determine whether b was passed or not
    if (arguments.length == 1) {
        // b was not passed
    } else {
        b = arguments[1]; // take second argument
    }
}

特殊的"数组"arguments在函数内部可用;它包含从索引0N - 1的所有参数(其中N是传递的参数数)。

这通常用于支持未知数量的可选参数(相同类型);但是,最好说明预期参数!

进一步考虑

虽然undefined自ES5以来不可写,但一些浏览器已知不会强制执行。如果您担心这一点,可以使用两种备选方案:

1
2
b === void 0;
typeof b === 'undefined'; // also works for undeclared variables