当表达式中的一个条件结果为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?
}
当表达式中的一个条件结果为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?
}
是的,这就是所谓的short circuit evaluation。
如果逻辑运算符为AND
,如果第一个计算结果为false
,那么第二个计算结果从不计算,因为该条件已知足够满足要求。
与OR
逻辑运算符,如果第一个是false
,它将评估第二个。否则,如果第一个是true
它不会评估第二个(不需要)。
这也是为什么你看到...
var a = function(b) {
b = b || 7;
}
'b = b || 7;'form通常用来作为一种简短的方式来为b未定义时提供一个默认值,因为undefined的计算结果为false,但*实际上并不工作*因为b可以保存其他几个值也计算为false(0,null,一个空字符串,当然false都计算为false)。当然,如果你确信所有这些其他值都应该被默认值覆盖,那么OK ... – nnnnnn 2011-05-05 02:35:37
@nnnnn这并不完美,但很多时候,这非常有用。 – alex 2011-05-05 02:37:19
我认为正确的方法是'b = typeof b =='undefined'?7:b;' – JVE999 2014-09-30 19:52:05
从我在代码中看到你的第二个条件始终评估,因为(f.a!==未定义)等于true。 – a1ex07 2011-05-05 01:40:48
@ a1ex07谢谢,修正。 – ash 2011-05-05 01:42:07
如果第一个条件评估为false,则会评估第二个条件。 – RobG 2011-05-05 01:43:33