noahgenius 发表于 2013-1-27 06:18:00

AS3数据类型

基础很重要,以下内容都是参照prog_actionscript30.pdf,但不算翻译,adobe labs上有。
type checking
as3里有两种类型检测:编译时和运行时。as3是一种动态定义类型语言(Dynamically typed language),一般来说应该是运行时才会去检测类型正确性,但是在实际开发中,这种检测有时会降低开发效率,所以flash9提供了编译时检测的方式,在发布时选择strict mode
is 操作符
is是用来代替instanceof的,检测变量是否是某个类型,比如
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite)     // true
trace(mySprite is IEventDispatcher)    // true
is 可以检测到接口,而instanceof 不行,看来is更能体现继承结构
trace(mySprite instanceof IEventDispatcher)   // false
as 操作符
as跟is的作用是一样的,区别是返回值不同,如果是true就返回类型值,false就返回null,比如:
trace(mySprite as DisplayObject)   //
trace(mySprite as Number)     // null
dynamic class
这真是一个很大的进步,除非使用dynamic关键字,as3的类都是静态的(sealed class),不能在类外动态定义变量方法,as2确能很自由。这样在运行时提高了很多效率
基本数据类型
这里有一点很重要,as3里基本类型也是对象(这跟java,C++不同,as3好像真的是完全的面向对象)。这样的写法是相同的:
var i:int = 3;
var i:int = new int(3);
这里值得注意一个技术细节,as3的基本类型是作为不变对象存在的(immutable object),如果你学过java,应该知道String就是这样一个特殊的对象。在内存中有这么一些区域来存放immutable object,他们是不可修改的(但是可以被垃圾回收),如果有两个引用是同一个值,比如var a:int = 3,var b:int = 3,他们实际上引用了同一个对象。但是如果修改它,比如a++,原来的3数值对象不会被修改(immutable的),但是会产生一个新对象4,被a引用,而3还是被b引用。这样,基本类型比复杂对象更能节省内存和提高效率。
   
[*]Boolean  默认值false   
[*]int  默认值0,32位整数   
[*]Number  默认值NaN,64位浮点数   
[*]String  默认值null(字符串也算?)   
[*]uint  默认值0,一般用在颜色值上
页: [1]
查看完整版本: AS3数据类型