檢查型別
你可以使用 is
運算子來驗證某個值是否屬於某種型別:
var sprite:Sprite = new Sprite();
trace(sprite is Sprite); // true
trace(sprite is DisplayObject); // true, Sprite inherits DisplayObject
trace(sprite is IBitmapDrawable); // true, DisplayObject implements IBitmapDrawable
trace(sprite is Number); // false
trace(sprite is Bitmap); // false, Bitmap inherits DisplayObject
// but is not inherited by Sprite.
還有一個 instanceof
運算子(不建議使用),與 is
幾乎完全相同,只是在檢查實現的介面和 int / uint 型別時返回 false
。
as
運算子也可以像 is
運算子一樣使用。如果你使用一些像 FlashDevelop 這樣的智慧 IDE,這將特別有用,它將為你提供顯式物件型別的所有可能屬性的列表。例:
for (var i:int = 0; i < a.length; i++){
var d:DisplayObject = a[i] as DisplayObject;
if (!d) continue;
d.//get hints here
stage.addChild(d);
}
為了與 is
獲得相同的效果,你會寫(不太方便):
for (var i:int = 0; i < a.length; i++){
if (a[i] is DisplayObject != true) continue;
var d:DisplayObject = a[i] as DisplayObject;
stage.addChild(d);
}
請記住,在使用 as
運算子檢查編碼時,給定值將首先轉換為指定型別,然後檢查該操作的結果是否為 false,因此在使用可能的 false / NaN 值時要小心:
if(false as Boolean) trace("This will not be executed");
if(false as Boolean != null) trace("But this will be");
下表顯示了型別運算子結果的一些基本值和型別。綠色單元格將評估為 true,紅色表示為 false,而 greay 將導致編譯/執行時錯誤。