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

我可以声明默认参数like吗

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

在JavaScript中?

523371 次浏览

这现在是语言的一部分:

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

请记住,ES6根据undefined检查值,而不是根据真值检查值(因此只有真正的未定义值得到默认值-假值如null将不会默认)。


与ES5:

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


// b will be set either to b or to 0.
}
只要你显式传入的所有值都是真相,这个函数就有效。 根据MiniGod的评论,不为真值:null, undefined, 0, false, ''

JavaScript库在函数实际启动之前对可选输入进行大量检查是很常见的。

更新

在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
}
}

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

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

进一步的考虑

尽管从ES5开始undefined就是没有可写的,但已知一些浏览器不会强制执行这一点。如果你担心这个问题,你可以使用两个替代方案:

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