每一种编程语言都提供强制类型转换,允许你将某一种数据类型转换成另一种数据类型,AS3自然也不例外。对AS3中的强制类型转换还是不太清楚,以前AS中是这样进行强制类型转换的:假设有一个类叫做Class1,我们声明了一个它的对象 c1,如果想要将它转换成Class2类型,只要这样写:Class2(c1);
在AS3中你依然可以这样写,但是AS3 中提供了一个新的操作符: as ,并且推荐使用as 进行强制转换,上述的用 as 操作符实现就是这样:
c1 as Class2;
使用 as 操作符有几个好处:
1.它的效果和第一种方法是一样的。
2.如果类型不兼容无法转换,就会返回null,而不是出错。这样你就可以自定义错误的时候该做什么。
3.没有运行时错误(Run Time Error)提示。
不过有些时候我在使用 as 的时候并不能达到强制转换的目的,而使用第一种方法则可以。为什么 as 操作符有时候会不好用呢?这个问题困扰了我很久,知道昨天在MXNA上发现了一篇日志,才恍然大悟:原来在AS3.0类库中最高层类(Top Level classes,所有Top Level classes的列表请看这里)之间进行强制转换时, as 操作符是不起作用的。比如,假如你想要将一个String 类型的字符串 str 转换成 Number 类型的数字 num 时,可能想要这样写:
num = str as Number;
这样写是没有用的,你只能通过第一种方法来达到强制转换的目的:
num = Number(str);
特别感谢raghuonflex对此做了说明,也希望这些对学习AS3.0的人有些提示。
////////////附上帮助中的说明和例子//////////////////
as 运算符
as 运算符是 ActionScript 3.0 中的新增运算符,也可用来检查表达式是否为给定数据类型的成员。但是,与 is 运算符不同的是,as 运算符不返回布尔值,而是返回表达式的值(代替 true)或 null(代替 false)。下面的示例说明了在简单情况下使用 as 运算符替代 is 运算符的结果,例如,检查 Sprite 实例是否为 DisplayObject、IEventDispatcher 和 Number 数据类型的成员。
在使用 as 运算符时,右侧的操作数必须是数据类型。如果尝试使用表达式(而非数据类型)作为右侧的操作数,将会产生错误。
- var mySprite:Sprite = new Sprite();
- trace(mySprite as Sprite); // [Sprite 对象]
- trace(mySprite as DisplayObject); // [Sprite 对象]
- trace(mySprite as IEventDispatcher); // [Sprite 对象]
- trace(mySprite as Number); // null
"as" 操作符只用来做向上类型转换(upcast)或向下类型转换(downcast)的,不是标题里所称的强制类型转换(typecast)
请不要误导新人
官方文档:
计算第一个操作数指定的表达式是否为第二个操作数指定的数据类型的成员。如果第一个操作数是该数据类型的成员,则结果为第一个操作数。否则,结果为 null 值。
并不能说明就是强制类型转换