检查类型

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

StackOverflow 文档