as3学习笔记(三)变量和数据类型
这部分与c++或java的数据类型差不多。需要注意的地方列举如下。
1. as3 包括标准模式和严格模式。默认是严格编译模式。也就是有“预编译”,而不是运行时才做检查。
静态类型语言(如 C++ 和 Java)在编译时执行类型检查。动态类型语言(如 js、Smalltalk 和 Python)在运行时执行类型检查。ActionScript 3.0
其实是动态类型的语言,它在运行时执行类型检查,但是它也支持在“严格模式”的特殊编译器模式下在编译时执行类型检查。在严格模式下,类型检查既
发生在编译时也发生在运行时,但是在标准模式下,类型检查仅发生在运行时。
例如:
var mytype; //在严格模式下将产生编译器警告,在运行模式则不提示
var mytype:int ; //两个模式下都没有问题。
也就是说,as3希望你定义变量时最好要指定数据类型。
按理说一个动态语言,灵活性强是它的优点,他偏偏要费事搞个严格模式,小沈阳说,这是为什么呢?
考虑下我们熟悉的JavaScript和java(或者c#,c++)的区别,我们很容易得出下面的结论:
在构造代码时,动态类型的语言带来了极大的灵活性,但代价是在运行时可能出现类型错误。静态类型的语言在编译时报告类型错误,但代价是要求类型信息在编译时是已知的。在较大的项目中通常建议使用编译时类型检查,因为随着项目变大,相对于尽早捕获类型错误,数据类型的灵活性通常会变得不那么重要。很显然,Adobe公司为了向世人证明flex是适合做大型项目开发的,而抛弃了原来动态语言的“弱类型”,希望你用“强类型”来写效率高的大型程序。
2. int 和Number类型
int 标识-231 到231-1之间的整数
Number ,官方文档是这么说的:在 ActionScript 3.0 中,Number 数据类型可以表示整数、无符号整数和浮点数。但是,为
了尽可能提高性能,应将 Number 数据类型仅用于浮点数。
3. void 数据类型,仅包含一个值:undefined
4. Object 类型:
ActionScript 3.0 中的 Object 数据类型与早期版本中的 Object 数据类型存在以下三方面的区别:第一,Object 数据类型不再是指定给没有类型注释的变量的默认数据类型。第二, Object 数据类型不再包括 undefined 这一值,该值以前是 Object 实例的默认值。第三,在 ActionScript 3.0 中, Object 类实例的默认值是 null。
var x:Object; //object类型,默认null
var x ;//无类型变量,默认undefined
var x:* ;//无类型变量,默认undefined,同var x;
5. is 和as
as3新增了is和as预算符。(这也是向传统的OO语言学习)
is运算符: 返回true或者false,来检查对象是否为特定类的实例,而且还可以检查对象是否是用来实现特定接口的类的实例:
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject); // true
trace(mySprite is IEventDispatcher); // true
注意:在早期的 ActionScript 版本中,此功能由 instanceof 运算符提供。但在ActionScript 3.0 中,不应使用 instanceof 运算符来测试变量或表达式是否为数据类型的成员。对于手动类型检查,应用 is 运算符来代替 instanceof 运算符,因为表达式 x instanceof y 只是在 x 的原型链中检查 y 是否存在(在 ActionScript 3.0 中,原型链不能全面地描述继承层次结构)。
as运算符:也可用来检查表达式是否为给定数据类型的成员。但是,与 is 运算符不同的是,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
6. 常量,ActionScript 3.0 支持 const 语句,该语句可用来创建常量。常量是指具有无法改变的固定值的属性。(还是向传统OO学习)
Flash Player API 定义了一组广泛的常量供您使用。按照惯例,ActionScript 中的常量全部使用大写字母,各个单词之间用下划线字符 (_) 分隔。例如,MouseEvent 类定义将此命名惯例用于其常量,其中每个常量都表示一个与鼠标输入有关的事件:
package flash.events
{
public class MouseEvent extends Event
{
public static const CLICK:String = "click";
public static const DOUBLE_CLICK:String = "doubleClick";
public static const MOUSE_DOWN:String = "mouseDown";
public static const MOUSE_MOVE:String = "mouseMove";
...
}
}