1.2.1 ActionScript的数据类型
在ActionScript中有着丰富的数据类型,从数字、字符串到对象一应俱全。在合适的地方使用合适的数据类型会使代码变得简洁明了。在Flash MX ActionScript中,数据的类型大致有整数/小数型、字符串型、布尔型、实例型以及对象型,下面将逐一介绍。
1.整数/小数型
这一类是在ActionScript中经常用到的数据类型,这种数据类型的值为整数或者小数,例如66或者3.14159。一般整数/小数型数据被用做计算或者记录坐标、在循环中使用的计数器等功能。这种类型的值可以经过数学运算符例如“+”,“–”,“*”,“/”等的运算,其结果仍然为整数/小数型。
2.字符串型
这种类型的数据也是经常被使用的,用引号括起来的一串字符、数字或者符号的组合就是一个字符串,例如“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 |
|
|
|
|
|
3.布尔型
布尔型的数据只可能有两种值:True(逻辑真)或者False(逻辑假),一般被用在判断中。布尔值也可以经过逻辑运算符运算,其结果仍是布尔值。例如,!true=false。在判断句的条件中,数值0被认为和布尔值的False相同,非0的数值被认为和True相同。
4.实例型
在Flash中,每一个物件都可以被实例化。实例化后的物件既是对象又是一种特殊的数据类型。物件实例化后,我们可以对其控制。通过改变它的属性,以及使用它的方法来实现对物件外观和行为的改变,从而达到用户交互的效果。
5.对象型
这里所说的对象型和实例型有点类似。只不过实例型是具体化、实例化的Flash物件,是看得见的、具体存在的。而对象型是抽象存在的,没有实体。例如Math对象、Date对象、XML对象等,它们没有看得见摸得着的外观,但却抽象存在。这些对象同样有一些属性和方法,在Flash ActionScript中,这些对象往往是计算或后台应用中不可或缺的部分。
1.2.2 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句柄所指的数组的第一个元素的值。
1.2.3 ActionScript的运算符
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中运算符同样也有优先级。括号内的运算具有最高优先级,是最先运算的;其次是非运算符;然后根据先乘除后加减的法则来运算,最后是比较运算符。如果一个表达式中的运算符的优先级相等,则从左到右运算。为了使代码容易被理解,不易出错,建议使用括号强行控制运算的优先级。