这些陈述在功能上是否相同?

时间:2014-10-22 12:37:56

标签: javascript

据我所知,它们的功能相同,但我想确定一下。我想使用后一种语句,因为它代码更少,效率更高。

function updateRunningTotals(taxExempt, discType, discAmt){
  if (typeof taxExempt === 'undefined') { taxExempt = false; }
  taxExempt = taxExempt || false;
}

我一直在使用if,但我在一些开源项目中看到了后一种说法。他们基本上做同样的事吗?任何表现好处?

编辑:taxExempt,在这种情况下可能并不总是传入。

2 个答案:

答案 0 :(得分:3)

它们并不等同。

if (typeof taxExempt === 'undefined') { taxExempt = false; }

此声明只会将undefined更改为false。

taxExempt = taxExempt || false;

这个也会更改null""0或在布尔上下文中被视为false的任何内容。

taxExempt = !!taxExempt;
taxExempt = Boolean(taxExempt);

这两个是等效的陈述,不仅将“假”值映射到false,还将“真”值映射到true

如果taxExemptundefinedfalsetrue,则所有显示的陈述都是等效的。

答案 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,''或未定义。

所以不,它们在功能上并不相同。而选择第二只因为它的代码较少并不是合理的逻辑。对大多数人来说,第一个是更清晰的逻辑。