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

如何在JavaScript中声明可选函数参数?,javascript,Javascript,我可以像这样声明默认参数吗 function myFunc( a, b=0) { // b is my optional parameter } 在带有ES6的JavaScript中:现在是: 请记住,ES6根据未定义的检查值,而不是根据真实性检查值(因此只有真实的未定义值才能获得默认值-像null这样的假值不会默认) 使用ES5: function myFunc(a,b) { b = b || 0; // b will be set either to b or to 0.

我可以像这样声明默认参数吗

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

在带有ES6的JavaScript中:

现在是:

请记住,ES6根据
未定义的
检查值,而不是根据真实性检查值(因此只有真实的未定义值才能获得默认值-像null这样的假值不会默认)


使用ES5:

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

  // b will be set either to b or to 0.
}
只要您显式传递的所有值都是有效的,这种方法就可以工作。
根据MiniGod的注释,不真实的值:
null,未定义,0,false,”

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

Update 使用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
的值和存在性,如果
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
    }
}
函数内部有特殊的“array”
参数
;它包含所有参数,从索引
0
N-1
(其中
N
是传递的参数数)

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

进一步考虑 尽管自ES5以来,
未定义
,但已知一些浏览器不强制执行此操作。如果您对此感到担忧,有两种选择:

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

null,undefined,0,false',NaN
都将获得默认值。如果您只希望在省略b时使用默认值,请使用
If(typeof b=='undefined')b=0
@minigodd当b被省略时,它会将
b
抛出到全局名称空间吗?@kalu否,因为您已经在本地范围(函数)中定义了它。它是在函数级别声明和作用域的,但如果不是从外部调用,它将是未定义的。所以这里没有全局范围分配,为什么?我将默认值设置为0。如果需要另一个默认值,只需将其更改为
b=b | | foo'
b === void 0;
typeof b === 'undefined'; // also works for undeclared variables