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

可能重复:
有没有更好的方法来在JavaScript中做可选的函数参数?

我可以声明默认参数吗?

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

在JavaScript中。


简单:

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

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

只要您明确通过的所有值都是真实的,就可以工作。 不符合MiniGod评论的值: null, undefined, 0, false, ''

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

更新:使用ES6,现在是语言的一部分:http://es6-features.org/#DefaultParameterValues使用ES6,它看起来像这样:

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

请记住,ES6检查值与undefined而不是针对真实性(所以只有真正的未定义值得到默认值 - 像null这样的虚假值不会默认)。


更新

在ES6中,这可能与您所描述的方式完全相同; 详细的描述可以在文档中找到。

老答案

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

替代性声明:

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以来undefined是不可写的,但已知一些浏览器不执行此操作。 如果您担心这一点,您可以使用两种选择:

b === void 0;
typeof b === 'undefined'; // also works for undeclared variables
链接地址: http://www.djcxy.com/p/17273.html

上一篇: How can I declare optional function parameters in Javascript?

下一篇: Why does typeof NaN return 'number'?