逻辑或代替三元

时间:2012-12-10 13:54:27

标签: javascript ternary-operator logical-operators

我有一个遗留脚本。这是它的一部分:

var e = e ? e : event;

所以,这里没有错。但我使用三元主要用于toogling。可以像这样安全地重写

var e = e || event;

有没有隐藏的理由不使用这个?

2 个答案:

答案 0 :(得分:3)

在您的示例e中,如果它不是 falsy 值,则会被使用,例如false, 0, "", null, undefined。否则将使用event。在你的情况下,这应该是保存。

但是使用更复杂的逻辑表达式而不是if-then-else(或三元)存在一些危险。这是一个例子:

result = value > 10 && getA() || getB()

如果后卫 value > 10评估为true并且getA()返回 falsy 值,则getB()将被退回这与if-then-else行为不同,后者将返回getA() falsy 结果。

答案 1 :(得分:0)

要小心第二个选项,你基本上期望如果'e'不是假的,它会将它分配给你的本地'e',否则,你将使用'event',但是如果例如,“e”为“0”,您希望当地的“e”拥有什么? “0”或“事件”?因为在您的情况下,您的本地“e”最终会以“事件”结束。