如何在 JavaScript 中声明可选函数参数? [复制]
Posted
技术标签:
【中文标题】如何在 JavaScript 中声明可选函数参数? [复制]【英文标题】:How can I declare optional function parameters in JavaScript? [duplicate] 【发布时间】:2012-09-29 14:41:50 【问题描述】:我可以声明默认参数吗
function myFunc( a, b=0)
// b is my optional parameter
在 javascript 中?
【问题讨论】:
【参考方案1】:使用 ES6: 现在是 part of the language:
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.
只要您明确传入的所有值都是truthy,它就可以工作。
根据 MiniGod 的评论,不真实的值:null, undefined, 0, false, ''
看到 JavaScript 库在函数实际启动之前对可选输入进行大量检查是很常见的。
【讨论】:
null, undefined, 0, false, '', NaN
都会得到默认值。
如果你只想要默认值,如果 b 被省略,使用if (typeof b === 'undefined') b = 0;
@MiniGod 会在省略 b 时将b
扔到全局命名空间中吗?
@kalu 否,因为您已在本地范围(函数)中定义了它。它在函数级别声明和作用域,但如果不从外部调用,它将是未定义的。所以这里不会发生全局范围分配。
为什么?我将默认值设置为 0。如果您想要另一个默认值,只需将其更改为 b = b || 'foo'
。【参考方案2】:
更新
使用 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
的值与存在,如果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
;它包含所有参数,从索引0
到N - 1
(其中N
是传递的参数数量)。
这通常用于支持未知数量的可选参数(相同类型);但是,最好说明预期的参数!
进一步考虑
尽管自 ES5 起 undefined
是 not writable,但已知某些浏览器不会强制执行此操作。如果您对此感到担心,可以使用两种选择:
b === void 0;
typeof b === 'undefined'; // also works for undeclared variables
【讨论】:
以上是关于如何在 JavaScript 中声明可选函数参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章