【发布时间】:2012-06-17 07:18:40
【问题描述】:
问题
为可选参数分配默认值的好方法是什么?
背景
我正在玩 JavaScript 中的 可选 参数,以及在未指定参数时分配默认值的想法。我的方法接受两个参数,我认为后者是可选的,如果未指定应默认为false。我的方法看起来像这样......
// selects the item, appropriately updating any siblings
// item to select [, toggle on / off]
this.selectItem = function(item, toggle)
{
toggle = toggle && typeof toggle === 'boolean';
if (toggle)
{
// ...
}
}
测试
在this jsFiddle 上运行一些测试后,使用以下主体进行默认值分配:
function checkParamIsBoolean(param)
{
param = param && typeof param === 'boolean';
}
checkParamIsBoolean('me'); // boolean
checkParamIsBoolean([]); // boolean
checkParamIsBoolean(true); // boolean
checkParamIsBoolean(false); // boolean
checkParamIsBoolean(1 == 1); // boolean
checkParamIsBoolean(1); // boolean
checkParamIsBoolean(null); // object
checkParamIsBoolean(undefined); // undefined
尽你所能,结果各不相同,而且不是我们想要的。
预期
null = falseundefined = false
实际
null = objectundefined = undefined
总结
如果未指定,是否有任何替代方法可以将默认值分配给可选参数?使用_toggle作为参数,然后在方法中将值赋给var toggle会更好吗?
【问题讨论】:
-
已经有很多关于这个话题的相关问题(example)。看看右侧的所有内容。如果你问为什么没有得到预期的结果,这是因为
null和undefined是假的,布尔运算符返回决定表达式结果的变量的值。 -
你说你想为可选参数使用默认值,但只有最后一次调用
checkParamIsBoolean没有设置参数。所有其他调用,即使您使用 null 作为参数,也在为参数设置一个值。 -
除了 Felix 的评论,我想补充一点
null是类型对象的值。将null指定为参数与未指定的参数不同。顺便说一句,调用该方法的另一种方式是checkParamIsBoolean();(这与您上一个示例基本相同)
标签: javascript