2011-05-05 46 views
22

当表达式中的一个条件结果为false时,我能否指望Javascript立即失败吗?Javascript有条件排序评估

f = {'a':'b'}; 
if (f.a !== undefined || f.a === 'b') { 
    // Is this OK to use, because the second condition will never be evaluated? 
} 
+1

从我在代码中看到你的第二个条件始终评估,因为(f.a!==未定义)等于true。 – a1ex07 2011-05-05 01:40:48

+0

@ a1ex07谢谢,修正。 – ash 2011-05-05 01:42:07

+0

如果第一个条件评估为false,则会评估第二个条件。 – RobG 2011-05-05 01:43:33

回答

41

是的,这就是所谓的short circuit evaluation

如果逻辑运算符为AND,如果第一个计算结果为false,那么第二个计算结果从不计算,因为该条件已知足够满足要求。

OR逻辑运算符,如果第一个是false,它将评估第二个。否则,如果第一个是true它不会评估第二个(不需要)。

这也是为什么你看到...

var a = function(b) { 
    b = b || 7; 
} 
+1

'b = b || 7;'form通常用来作为一种简短的方式来为b未定义时提供一个默认值,因为undefined的计算结果为false,但*实际上并不工作*因为b可以保存其他几个值也计算为false(0,null,一个空字符串,当然false都计算为false)。当然,如果你确信所有这些其他值都应该被默认值覆盖,那么OK ... – nnnnnn 2011-05-05 02:35:37

+0

@nnnnn这并不完美,但很多时候,这非常有用。 – alex 2011-05-05 02:37:19

+0

我认为正确的方法是'b = typeof b =='undefined'?7:b;' – JVE999 2014-09-30 19:52:05