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);
2 了解toString()方法
当使用trace函数的时候,会自动调用toString()方法,Int类的toString()方法返回表示数字的字符串
int 的toString方法可以有参数,可以用来完成进制转换
var a:int = 60;
trace(a.toString(2));//转为二进制
trace(a.toString(8));//转为八进制
和toString方法相反的方法是 parseInt方法
trace(parseInt("110",2))//二进制转为十进制
trace(parseInt("3c0",16))//16进制转为十进制
3 uint类和int类
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)来替代
5 Boolean类型和Boolean类
boolean类型可以用==进行比较
6 String类型和String类
字符串可以使用 单引号或者双引号来声明
特殊的声明:
var s:String = 'hello "actionscrpit"';
trace(s);
trace("---------------------");
var s1:String;
trace(s1);
输出为:
hello "actionscrpit"
---------------------
null
可以得出 没有赋值的String的默认输出为 null
字符串的方法:
var str:String = "abcdefg";
trace(str.charAt(0));
trace(str.length);
7 变量的默认值:
//定义变量 但是没有赋值
var a:Number;
//输出变量的值
trace(a);
输出结果为 NaN
表示 不是一个数字
一般要判断一个变量 是不是NaN,可以使用isNaN函数
//定义变量 但是没有赋值
var a:Number;
trace(isNaN(a));
Actionscript3 默认值
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);
时间为81
3 未声明类型
var a = 0;
var startTime:int = getTimer();
for(var i=0;i<=100000;i++)
{
a = (a + 5)*2 /5;
}
trace(getTimer() - startTime);
时间为 30
由上面可以看出: 在程序使用变量的时候,应使用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);
这样就不行,因为obj的类型已经明确是int,不能墙砖为string
* 类型的默认值是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};
代码中的,[] {} 分别表示 数组,对象运算符,可以快速创建 数组 和 对象, a=[1] 是创建喊元素1 的数组 a = { a : 0} 表示创建 含x为0的 对象
总结:
1 能确定类型的就一样要指定类型
2 如果不能确定类型,但是能确定引用类型,则用Object
3 如果可能是引用,也可能是基本类型,则用 *
* 类型变量 与 Object类型变量的主要区别在于: * 类型变量可以是undefined 而Object类型不能为undefined
他们得默认值分为 undefined null