2014-10-29 260 views
0

有没有什么办法可以简化var x = false || true;?因为提供的示例总是评估为true。例如,在此功能中:JavaScript:处理函数参数的默认值为true

function load(bool) { 
    loading = bool || true; 
} 

loading始终评估为true。

随着lodash的帮助下,我尝试loading = (!_.isUndefined(bool)) ? bool : true;。否则,它可能被写为loading = (typeof bool !== undefined) ? bool : true;。但我发现这是冗长冗长的。

编辑:澄清的目的,我想一个更好的解决办法(相比,我的尝试)为x = false || false,其中布尔既可以是truefalse(和false不会出现这种情况的工作,因为它会评估只为真)。

+1

'不管||除非第一个不是布尔表达式(并且未评估为undefined,null,“”,0),否则true'总是'true'。 – 2014-10-29 02:16:06

+0

看起来你想'typeof bool =='undefined'? true:bool',但我无法想象你为什么要这样做。 – RobG 2014-10-29 02:20:51

+0

你想要应用什么逻辑?如果它是'undefined',它应该是'true',否则它应该是'!! bool'? – deceze 2014-10-29 02:24:12

回答

0

如何

(bool == null) ? true : bool; 

正如@RobG提到的,我们甚至可以让这个更简洁:

(bool == null) || bool; 
+0

如果OP想要简洁,那么'bool == null?true:bool'可能适合。不是我的一杯茶。 'null == x || x'也不是,但它不太稳定。 – RobG 2014-10-29 02:30:35

+0

啊!是的,这是减少声明大小的另一个级别。我会用你的建议更新我的答案。 – Lokesh 2014-10-29 02:34:59

1

如果你想明确的事实,你是给这个参数默认值为true,那么您可以参考arguments.length

bool = arguments.length ? bool : true; 

bool = bool || !arguments.length; 
+0

感谢关于'''arguments'''的想法。我接受了Lokesh的回答,因为听起来更加明确(不是指发布的内容)。 – srph 2014-10-29 03:42:08

+0

@RobG是的,这更清晰,将解决答案。 – 2014-10-29 06:53:06