据我所知,它们的功能相同,但我想确定一下。我想使用后一种语句,因为它代码更少,效率更高。
function updateRunningTotals(taxExempt, discType, discAmt){
if (typeof taxExempt === 'undefined') { taxExempt = false; }
taxExempt = taxExempt || false;
}
我一直在使用if
,但我在一些开源项目中看到了后一种说法。他们基本上做同样的事吗?任何表现好处?
编辑:taxExempt,在这种情况下可能并不总是传入。
答案 0 :(得分:3)
它们并不等同。
if (typeof taxExempt === 'undefined') { taxExempt = false; }
此声明只会将undefined
更改为false。
taxExempt = taxExempt || false;
这个也会更改null
,""
,0
或在布尔上下文中被视为false的任何内容。
taxExempt = !!taxExempt;
taxExempt = Boolean(taxExempt);
这两个是等效的陈述,不仅将“假”值映射到false
,还将“真”值映射到true
。
如果taxExempt
为undefined
,false
或true
,则所有显示的陈述都是等效的。
答案 1 :(得分:3)
> if (typeof taxExempt === 'undefined') { taxExempt = false; }
在这种情况下,如果 textExempt 的值为 undefined ,则 textExempt 将仅设置为false。
> taxExempt = taxExempt || false;
在这种情况下,如果 taxExempt 的值强制为false(即ToBoolean(taxExempt)返回false),则将 taxExempt 设置为false。它可能是null,0,false,NaN,''或未定义。
所以不,它们在功能上并不相同。而选择第二只因为它的代码较少并不是合理的逻辑。对大多数人来说,第一个是更清晰的逻辑。