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

时间:2012-10-09 09:41:28

标签: javascript

  

可能重复:
  Is there a better way to do optional function parameters in Javascript?

我可以声明默认参数,如

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

在javascript中。

2 个答案:

答案 0 :(得分:468)

使用ES6:现在是part of the language

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

请记住,ES6会针对undefined检查值,而不是针对truthy-ness(因此只有真正的未定义值才会获得默认值 - 像null这样的虚假值不会默认值。)


使用ES5:

function myFunc(a,b) {
  b = b || 0;

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

只要您明确传入的所有值均为truthy,此功能就会起作用。 根据MiniGod的评论不是真正的值:null, undefined, 0, false, ''

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

答案 1 :(得分:85)

更新

使用ES6,这可能完全按照您描述的方式进行;详细说明可在the documentation

中找到

旧答案

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

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的值和存在,如果"default value"不存在或是假的,则返回b的值。

替代声明:

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是传递的参数数量。)

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

进一步考虑

虽然自ES5以来undefinednot writeable,但已知某些浏览器不强制执行此操作。如果您担心这个问题,可以使用两种方法:

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