Flex2 发现之旅:ActionScript 3 类型转换

ActionScript 2中,类型转换的语法为:type(item),例如下面我们将string转换为Number:

 

var str:String="1";
var i:Number=Number(1);

 

详细的类型转换(casting )语法请查看:About casting objects,该语法存在一些语言混淆的问题:

  • 与其他语言如Java和C#的类型转换语法不一致
  • 语法不明确 - 因为该类型转换看起来就象是调用构造器,这样的代码就不够清晰:究竟是您忘了new关键字了呢,还是您就是想进行类型转换处理呢?
  • 转换函数优先 - ActionScript中有一些转换函数如:Array()、 Number()和Boolean(),因为这些转换函数的优先级高于类型转换操作,所以通常这样的情况我们就得不到我们预期的结果,因为转换函数的优先执行,将一个类型转换成数组类型的操作都不能实现。

为了避免以上问题,ActionScript 3引入了与类型转换行为类似的as操作符,该操作符的语法为:表达式 as 数据类型,该语法与C#中的as操作符类似,这样可以更好的帮助以后C#开发人员迁移到ActionScript 3中类。

as操作符使用很简单:

 

// getChildAt方法返回DisplayObject类型对象,但是
// 我要将其转换为Sprite,所以我们使用了as操作符
var s:Sprite = getChildAt(0) as Sprite;

 

类型转换与as操作符一个关键的不同是:转换失败时的处理。ActionScript 2中,类型转换失败将返回null,而在ActionScript 3中,将触发TypeError异常。而as操作符,如果转换失败的话,将返回目标数据类型的默认缺省值:

数据类型缺省值
Booleanfalse
int0
NumberNaN
Objectundefined
Stringnull
uint0
未声明(默认为:Object)undefined
其他数据类型null

示例如下:

 

var o:Object = "test";

trace( o as MovieClip ); // 显示: null
trace ( MovieClip ( o ) ); // 产生TypeError

 

使用as替代类型转换其中一个非常好的优点是:现在使用as操作符您可以成功将其他类型的转换到数组类型了:

 

// 为了演示需要,将一个一般的Object初始化数组
var o:Object = [1, 2, 3];

// 试图将o转换为数组 - 非期待结果
// 因为数组转换函数优先被调用,我们未能得到我们期待的结果
var a:Array = Array( o );
// 数组转换函数创建了一个数组,该数组只有一个值为o的元素
trace( a.length ); // 输出: 1
// 确认其只有一个元素 (长度为3的数组)
trace( a[0] ); // 输出: 3
// 访问o的第1个元素
trace( a[0][0] ); // 输出: 1

// 使用as关键字将o转换为数组,结果与我们期待的一致
var b:Array = o as Array;
trace( b.length ); // 输出: 3
// 访问o的第1个元素
trace( b[0]); // 输出: 1

 

正是ActionScript 3的这些积极的改变,使得我们愈加享受用AS3工作的乐趣,虽然我不明白在(类型)表达式这种类似Java的类型转换语法更有优势的情况下(估计大家都倾向与Java语法吧!),为什么ActionScript 3选择了as 类型(表达式)这样的类型转换语法,但是至少,as操作符使得类型转转再次可以进入我们可容忍的范围。

http://blog.eshangrao.com/index.php/2006/02/17/202-flex2-actionscript-3

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值