是和&&操纵者懒惰的操作员?

时间:2010-07-05 11:04:01

标签: actionscript

var b:Boolean = condition1() && condition2();

在此声明中,如果condition1()评估为false,是否会评估condition2()

3 个答案:

答案 0 :(得分:7)

是。 &&运算符(以及||已短路

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/operators.html#logical_AND已对此进行了解释。

  

如果是expression1,则返回false,或者可以转换为false,否则返回expression2。可以转换为false的值的示例包括0NaNnullundefined。如果您将函数调用用作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时,我已多次使用这种特殊方法。