如何在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