ActionScript3 的数据类型可以分为:简单数据类型和复杂数据类型
简单数据类型: 表示简单的值,是在最低抽象层储存的值,运算速度相对较快
复杂数据类型:类类型,例如 Stage,MovieClip,TextField类型等
AS3的简单数据类型包括: int unitNumber StringBoolean
int unit Number都是表示数字类型
String 表示字符串类型
Boolean 表示 布尔类型
1 int 类型
int 的最大值 最小值
trace("max:" + int.MAX_VALUE); trace("max:" + int.MIN_VALUE);
当使用trace函数的时候,会自动调用toString()方法,Int类的toString()方法返回表示数字的字符串
int 的toString方法可以有参数,可以用来完成进制转换
var a:int = 60; trace(a.toString(2));//转为二进制 trace(a.toString(8));//转为八进制
trace(parseInt("110",2))//二进制转为十进制 trace(parseInt("3c0",16))//16进制转为十进制
unit和int Number合称为 数值类型
unit类型是 无符号32位整数,即非负整数。
一般主要用于 表示像素 颜色和其他一些int所不能很高工作的领域
键控代码:在Flash游戏中 ,经常会用到键控代码,键控代码肯定是一个正整数,因为声明一个键控代码的时候,应该声明为uint类型
由于键控代码是不会改变的,所以这种不变得数据容器叫做常量,声明常量使用const关键字
var KEY_A:uint = 65;
var KEY_B:uint = 66;
4 Number类型和Number类
Number类型可以 表示 整数或小数
在Flash里面,整数计算没有误差,浮点数计算总会出现误差。
例如:
trace(0.1+0.2==0.3);//true trace(0.15+0.15==0.3);//false
所以对于浮点数 千万不能用==来判断两个数是否相等,而是用 ( a < b + 1e - 15)&& (a > b - 1e - 15)来替代
boolean类型可以用==进行比较
6 String类型和String类
字符串可以使用 单引号或者双引号来声明
特殊的声明:
var s:String = 'hello "actionscrpit"'; trace(s); trace("---------------------"); var s1:String; trace(s1);
hello "actionscrpit" --------------------- null
字符串的方法:
var str:String = "abcdefg"; trace(str.charAt(0)); trace(str.length);
//定义变量 但是没有赋值 var a:Number; //输出变量的值 trace(a);
表示 不是一个数字
一般要判断一个变量 是不是NaN,可以使用isNaN函数
//定义变量 但是没有赋值 var a:Number; trace(isNaN(a));
Number : NaN
String : null
Boolean : false
int : 0
uint : 0
8 变量定义域代码优化
在时间轴上 定义变量有3中方式,使用var定义变量,使用this动态添加变量和直接定义变量。
这三种定义方式中,硬使用var来定义变量,因为它的执行效率最高。‘
1 使用var并且 指明变量类型
var a:Number = 0; var startTime:int = getTimer(); for(var i=0;i<=100000;i++) { a = (a + 5)*2 /5; } trace(getTimer() - startTime);时间为5
2 使用this
this.a = 0; var startTime:int = getTimer(); for(var i=0;i<=100000;i++) { this.a = (this.a + 5)*2 /5; } trace(getTimer() - startTime);
3 未声明类型
var a = 0; var startTime:int = getTimer(); for(var i=0;i<=100000;i++) { a = (a + 5)*2 /5; } trace(getTimer() - startTime);
由上面可以看出: 在程序使用变量的时候,应使用var定义变量,并且要声明变量的准确数据类型。
9 *类型 与自动类型转换
如果编程 时没有生命变量的数据类型,系统会以*类型进行处理,*数据类型是AS3中新增的类型,可以与Object类型配合使用,用来声明不确定的数据类型
*类型可以是 简单类型 也可以是复杂类型
eg
var a:* = 5;
虽然代码是正确的,但是这样声明的*数据类型其实会自动被转换为Number类型,因为变量a的值是5,是数字。
再例如:
FLash的内置类,中有很多动态类,通过类的实例可以动态的添加变量,这样添加的变量不能声明数据类型,实际上这种变量的类型就是 * 数据类型
eg
var obj:*; obj = 3; trace(obj); obj = " hello "; trace(obj);
但是
var obj:int; obj = 3; trace(obj); obj = " hello "; trace(obj);
* 类型的默认值是undefined,而object类型的默认值是null, 如果尝试给一个Object类型的变量赋值undefined,编译器会自动转为null
在AS3 中,任何类都是Object的子类,例如Number类是Object的子类,Array是Object的子类。
所以Object类型也可以像* 类型一样,可以接受任何类型
下面代码是正确的:
var obj:Object; obj = 433; obj = true; obj = [1]; obj = { a : 0};
总结:
1 能确定类型的就一样要指定类型
2 如果不能确定类型,但是能确定引用类型,则用Object
3 如果可能是引用,也可能是基本类型,则用 *
* 类型变量 与 Object类型变量的主要区别在于: * 类型变量可以是undefined 而Object类型不能为undefined
他们得默认值分为 undefined null