var b:Boolean = condition1() && condition2();
在本聲明中,如果condition1()
的計算結果爲false,將會評估condition2()
嗎?在actionscript中是否是&&操作符?
var b:Boolean = condition1() && condition2();
在本聲明中,如果condition1()
的計算結果爲false,將會評估condition2()
嗎?在actionscript中是否是&&操作符?
是的。 &&
運營商(也||
)是短路。
這已在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
,則不會調用該函數。
一點點的谷歌搜索表示yes。另外,通常的術語是short-circuited,而不是lazy。
正確。編譯器應該總是從條件中取出最快的路徑。如果任何測試用例失敗,編譯器知道進一步測試的結果是不相關的,並決定當時和那裏保釋。
var obj:Object = null;
if(obj && obj.name == "fred")
{
trace("Hi, fred.");
}
你永遠不會看到「嗨,弗雷德」。因爲Obj是空的。好東西,因爲第二個測試用例會拋出一個錯誤,因爲你不能以這種方式解引用空對象。當我需要確保某個對象在取消引用之前不是空的時候,我已經多次使用這個特定的方法。
你試過了嗎?您可以在條件1和條件2中都放置一個trace()調用,然後查看哪些被調用。幫助使用跟蹤命令:http://www.republicofcode.com/tutorials/flash/as3trace/ – Douglas 2010-07-05 11:06:17