var b:Boolean = condition1() && condition2();
在此声明中,如果condition1()
评估为false,是否会评估condition2()
?
答案 0 :(得分:7)
是。 &&
运算符(以及||
)已短路。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#logical_AND已对此进行了解释。
如果是
expression1
,则返回false
,或者可以转换为false
,否则返回expression2
。可以转换为false
的值的示例包括0
,NaN
,null
和undefined
。如果您将函数调用用作expression2
,如果expression1
评估为false
,则不会调用该函数。
答案 1 :(得分:3)
有点谷歌搜索表示yes。此外,通常的术语是short-circuited,而不是lazy。
答案 2 :(得分:0)
正确。编译器应始终采用条件的最快路径。如果任何测试用例失败,编译器就知道进一步测试的结果是无关紧要的,并决定当时和那里保释。
var obj:Object = null;
if( obj && obj.name == "fred" )
{
trace( "Hi, fred." );
}
你永远不会看到“嗨,弗雷德”。因为Obj是null。也是好事,因为第二个测试用例会抛出错误,因为你不能以这种方式取消引用null对象。当我需要在解除引用之前确保某个对象不为null时,我已多次使用这种特殊方法。