当表达式中的一个条件结果为false时,我能指望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立即失败吗?
f = {'a':'b'};
if (f.a !== undefined || f.a === 'b') {
// Is this OK to use, because the second condition will never be evaluated?
}
是的,这被称为短路求值。
使用AND
逻辑运算符时,如果第一个条件评估为false
,则第二个条件将不会被评估,因为该条件已经足够满足。
使用OR
逻辑运算符时,如果第一个条件为false
,它将评估第二个条件。否则,如果第一个条件为true
,它将不会评估第二个条件(没有必要)。
这也是为什么你会看到...
var a = function(b) {
b = b || 7;
}
b = typeof b == "undefined"?7:b;
。 - JVE999typeof
是不必要的,因为你已经定义了 b
,所以变量不存在的可能性已经不存在了。所以你可以直接使用 == null
来检查 null
和 undefined
(通常在这种检查中它们是可等价的)。 - alex