在ActionScript中有着丰富的数据类型,从数字、字符串到对象一应俱全。在合适的地方使用合适的数据类型会使代码变得简洁明了。在Flash MX ActionScript中,数据的类型大致有整数/小数型、字符串型、布尔型、实例型以及对象型,下面将逐一介绍。
这一类是在ActionScript中经常用到的数据类型,这种数据类型的值为整数或者小数,例如66或者3.14159。一般整数/小数型数据被用做计算或者记录坐标、在循环中使用的计数器等功能。这种类型的值可以经过数学运算符例如“+”,“–”,“*”,“/”等的运算,其结果仍然为整数/小数型。
这种类型的数据也是经常被使用的,用引号括起来的一串字符、数字或者符号的组合就是一个字符串,例如“abcd123+–*”和“12345”都是字符串。这种类型的数据通常被用来存放被输入或者要输出的一些文本信息。字符串也可以被一些字符串运算符所运算,例如,可以通过字符串连接符“+”来连接多个字符串,其结果仍是一个字符串。“aaabbb”+“cccddd”的结果是“aaabbbcccddd”。在字符串中有一些特殊的字元是普通的字符无法表示的,这就需要用到转义字符。所谓转义字符就是用两个字符的组合来表示一个特殊的字符。在Flash ActionScript中,和C语言或Java语言类似,都使用“\”来表示转义字符。“\”字符再加上另一个字符可以表示一个特殊字符。具体的表示方法可以参见表1-1。
表1-1 转义字符的表示方法
转 义 字 符 | 所表示的特殊字符 |
| ||
\b | Backspace回退 |
| ||
\f | 打印机换页符 |
| ||
\n | 换行符 |
| ||
\r | Return回车符 |
| ||
\t | Tab 跳格符 |
| ||
\” | “ 双引号 |
| ||
\’ | ‘ 单引号 |
| ||
\\ | \ 反斜线符 |
| ||
\000-\377 | 8进制数,例如\777表示8进制的777 |
| ||
| \x0000-\xFFFF | 16进制数,例如\x1a表示16进制的1a | ||
布尔型的数据只可能有两种值:True(逻辑真)或者False(逻辑假),一般被用在判断中。布尔值也可以经过逻辑运算符运算,其结果仍是布尔值。例如,!true=false。在判断句的条件中,数值0被认为和布尔值的False相同,非0的数值被认为和True相同。
在Flash中,每一个物件都可以被实例化。实例化后的物件既是对象又是一种特殊的数据类型。物件实例化后,我们可以对其控制。通过改变它的属性,以及使用它的方法来实现对物件外观和行为的改变,从而达到用户交互的效果。
这里所说的对象型和实例型有点类似。只不过实例型是具体化、实例化的Flash物件,是看得见的、具体存在的。而对象型是抽象存在的,没有实体。例如Math对象、Date对象、XML对象等,它们没有看得见摸得着的外观,但却抽象存在。这些对象同样有一些属性和方法,在Flash ActionScript中,这些对象往往是计算或后台应用中不可或缺的部分。
所谓常量和变量,就是在程序中被引用,用来代替数字、字符等值的代号。常量和变量的不同之处在于:常量被设定初始值后,在后续的程序中,只能引用其被设定的初始值,而不能更改其所代表的值,也就是说,常量的值是恒定不变的;而变量则不同,顾名思义,其所代表的值是可以被改变的,在程序中可以使用变量的值进行计算,计算后得到的结果仍然存回变量,以备输出或后续程序的引用。
在Flash ActionScript中,固定的常量都是Flash自己设定好的,直接引用即可。Flash中的常量有个特点——它们的标示符都是大写的,例如key.ENTER表示回车键、nath.PI表示圆周率的值等。
要使用变量,就首先要有变量名。在Flash中,变量名的定义有以下原则:
在使用变量的时候,还要注意变量的作用域。每一个变量都有一个作用域,它可以是全局变量,也就是说在整个ActionScript程序中都有效;也可以是局部变量,只能在某个函数中使用。在Flash ActionScript中,全局变量的使用无需先进行声明。也就是说,不必像C或Java等高级语言那样,在使用变量前先进行变量的声明,Flash会根据用户赋给变量的不同的值自动来决定变量的类型。但是局部变量在使用前必须在其所在的作用域声明,否则有可能会被认为是全局变量。看下面的例子:
a=1;
function varTest()
{
a=a+2;
}
varTest();
在这段程序中,函数varTest() 中的变量a没有声明,所以被认为是全局变量,程序执行之后,a的值为3。如果上面的程序改成这样:
a=1;
function varTest()
{
var a=0;
a=a+2;
}
varTest();
在这段程序的函数varTest()中用var语句声明了一个局部变量a,所以当程序执行时,函数中改变a的值仅仅发生在varTest()函数内部,改变的是局部变量a的值。而全局变量a的值并没有发生改变,程序执行完后,a的值仍然是1。
局部变量的产生还有一种情况,在声明函数的时候,函数如果有参数,则函数的参数自动被声明成局部变量。看下面的例子:
a=1;
function varTest(a)
{
a=a+2;
}
varTest();
仔细看上面这段程序,可以看到,在声明函数varTest()时,声明了这个函数的参数a。这样,在这个函数中如果使用变量a,就仅仅指的是在这个函数内的局部变量a,而不是全局变量a。所以这段程序执行过后,a的值仍然是1。
在Flash中也可以使用数组。数组的声明方法请看下面的例子:
var myArray=[1,0,3,5,2];
在使用时,myArray[0]表示数组中的第一个值,在这里是1;mayArray[1]表示数组中的第二个值,在这里是0;以此类推。
数组变量和单纯的变量不同,单纯的变量存放的仅仅是变量的值,而数组变量存放的是一个指向内存中存放数组的区域的一个句柄。数组在传递时并不是简单地将值传递给另一个数组,而是将自己的句柄传递给了另一个数组变量。看下面的一个例子:
var myArray=[1,0,3,5,2];
var testArray= myArray;
testArray[0]=99;
trace(myArray[0]);
在程序第二行,将myArray的句柄赋给了testArray,第三行改变了testArray的第一个元素的值。因为testArray的句柄指向就是myArray的句柄指向,所以改变testArray第一个元素的值就等于改变myArray的值。最后一行用trace()函数输出myArray第一个元素的值时,可以发现myArray的第一个元素的值果然被改变成了99。
关于句柄的说明也许初学者很难理解,看一下图1-4也许能帮助理解。
myArray句柄 myArray句柄
testArray句柄
图1-4
在没有复制myArray的句柄前,只有myArray的句柄指向内存中存放[1,0,3,5,2]数组的区域;将myArray的句柄复制给testArray后,myArray和testArray的句柄都指向内存中存放[1,0,3,5,2]数组的同一个区域,所以修改testArray句柄所指的数组的第一个元素的值也就等于修改了myArray句柄所指的数组的第一个元素的值。
ActionScript既然是一种编程语言,自然免不了运算,而运算则离不开运算符。在ActionScript中运算符和JavaScript的类似,基本上可以分为数学运算符、逻辑运算符、字符串运算符、比较运算符、赋值运算符和位运算符。具体的运算符介绍如表1-2所示。
表1-2 运算符介绍
运 算 符 | 名 称 | 说 明 |
数值运算符 | ||
+ | 加 | 1+1=2 |
- | 减 | 1–1=0 |
* | 乘 | 2×3=6 |
(续表)
运 算 符 | 名 称 | 说 明 |
数值运算符 | ||
/ | 除 | 6/3=2 |
% | 取余数 | 4%3=1 |
++ | 自加1 | a++ 和a=a+1相同 |
– | 自减1 | a– 和 a=a–1相同 |
逻辑运算符 | ||
! 或not | 逻辑非 | !true=false |
&& 或and | 逻辑与 | true&&true=true; false&&false=false; true&&false=false |
|| 或or | 逻辑或 | true || true=true; false || false=false; true || false=true |
比较运算符 | ||
> | 大于 | 3>2 返回值为true; 2>3返回值为false |
< | 小于 | 2<3返回值为true; 3<2返回值为false |
= = | 等于 | 3= =3返回值为true; 2= =3返回值为false |
>= | 大于等于 | 3>=2返回值为true; 3>=3返回值为true; 2>=3返回值为false |
<= | 小于等于 | 2<=3返回值为true; 2<=2返回值为true; 3<=2返回值为false |
!= 或 <> | 不等于 | 2!=3返回值为true; 2!=2返回值为false |
= = = | 恒等于 | 5= = = 5返回值为true; “5” = = 5返回true, “5” = = = 5返回false |
字符串运算符 | ||
add | 连接 | “abc” add “efg” = “abcdefg” |
eq | 等于 | “abc” eq “abc” 返回值true |
ge | 大于等于 | “bbc” ge “abc” 返回值true(英文比较ASCII码,中文比较机内码) |
gt | 大于 | “bbc” gt “abc” 返回值true(英文比较ASCII码,中文比较机内码) |
le | 小于等于 | “abc” le “bbc” 返回值true(英文比较ASCII码,中文比较机内码) |
lt | 小于 | “abc” lt “bbc” 返回值true(英文比较ASCII码,中文比较机内码) |
ne | 不等于 | “bbc” ne “abc” 返回值true(英文比较ASCII码,中文比较机内码) |
位 运 算 符 | ||
& | 位与 | 二进制位与运算 1&0 = 0 ; 1&1=1 ; 0&0=0 |
| | 位或 | 二进制位或运算 1 | 1= 1 ; 1 | 0=1 ; 0 | 0=0 |
^ | 位异或 | 二进制位异或运算 1^1=0; 0^1=1; 0^0=0 |
~ | 位非 | 二进制位非运算 ~1=0 ; ~0=1 |
<< | 左移 | 二进制数左移 0110<<1 = 1100 |
>> | 右移 | 二进制数右移,缺位补最左一位的数值 1100>>1=1110 |
>>> | 无符号右移 | 二进制数右移,缺位0补 1100>>>1=0110 |
赋值运算符 | ||
= | 赋值 | a=b,将b的值赋给a,可以连用 a=b=c |
+=、–=、*= /=、%=、&=、|=、<<= >>=、^= >>>= | 运 算 赋 值 | =前面是一个运算符,如果a+=2,则等同于a=a+2;a–=2等同于a=a–2;a%=2等同于a=a%2以此类推 |
在ActionScript中运算符同样也有优先级。括号内的运算具有最高优先级,是最先运算的;其次是非运算符;然后根据先乘除后加减的法则来运算,最后是比较运算符。如果一个表达式中的运算符的优先级相等,则从左到右运算。为了使代码容易被理解,不易出错,建议使用括号强行控制运算的优先级。