检查类型
你可以使用 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 将导致编译/运行时错误。