2006-02-06 13:14Zoom全屏第二讲 再谈变量

脚本提高课第二讲;再谈变量
第二讲 再谈变量
===================
一 动态变量与静态变量
===================
动作脚本是一种动态类型化语言。每个变量都有一种类型。该类型是在运行时分配的,并且可以在执行过程中进行更改。这一点与静态类型化语言(如 Java 或 C++)不同,在静态类型化语言中,在编译时分配类型,而且在运行时无法更改。
所谓动态变量指的是一种临时变量,只有执行与该变量相关的一段代码时他才存在,执行完成后内存就释放,特点是变量类型随着变量的赋值而改变.如果变量没有被赋值则系统默认为null或者undefind类型.所谓静态变量指的是,变量存在于整个程序的生命周期中,通常只被某个函数所访问.

动态变量的特点
1 对于未能赋值的变量默认其值为undefined。
例1
on (release) {
var a;
trace(a);//undefined
}
2 undefined可以进行字符串运算不能进行数值运算。
例2
on (release) {
trace(a+"2");//undefined2
trace(a+2);//NaN
}
3 变量类型随着变量的赋值而改变。
例3
on (release) {
var a = 1;
trace(typeof (a));//number
a = "1";
trace(typeof (a));//string
}

===================
二 原始型变量与引用型变量
===================
在前面的课中,我们知道变量的类型有下列几种:字符串、数字、布尔值、对象、影片剪辑、函数、空值和未定义.也就是说一个变量,如果它保存的数据是"字符串",则这个变量就是字符串类型的,如果它保存的是一个影片剪辑,则这个变量就是MovieClip类型的.特别强调的是,保存MovieClip数据的变量名通常用"mc"或"my_mc"表示.
在以上变量类型中,按照其应用特性可以分为:原始变量类型和引用变量类型。原始变量类型是指字符串、数字和布尔值,它们都有一个常数值,因此可以包含它们所代表的元素的实际值。引用变量类型是指影片剪辑和对象,它们的值可能发生更改,因此它们包含对该元素的实际值的引用。
引用变量类型的数据包涵大量复杂信息,此类型变量并不包涵实际的值,它所包含的是对其数据的引用,这种引用类似于指向变量内容的一个别名,当这个变量需要知道它的值时,该引用会查询其内容,然后返回其答案.


原始变量类型与引用变量类型比较
1 原始变量类型返回它所包含的实际值
例4
on (release) {
var a = 5;
trace(a);//5
}

2 引用变量类型返回对该变量的引用
例5
on (release) {
trace(this.mc);//_level0.mc
}

3 引用变量类型不可以应用赋值运算符
例如:
mc是一个实例名,则mc=5是错误的.

===================
三 为动态变量名赋值
===================
当一个变量的名称不断变化时,用通常的赋值运算符是不能为其赋值的,这是因为动态变量名实质上一个字符串,是一种数据,也就是说它已经不是一个变量了,要对其赋值必需将其转换为变量,其方法是使用set 语句或者数组访问运算符.

1 变量与字符串的区别
我们在时间轴上写如下输出语句:
trace(a1); //undefined
trace("a"+1);//a1
(1)显示undefined,说明a1的确是一个变量.既然a1是变量,那么我们可以为它赋值.如下所示:
a1=0;
语法检查没错误.
(2)显示a1说明"a"+1不是变量而是一个字符串类型的数据.你不能为字符串去赋值,如下所示
"a"+1=0;
语法检查显示:"赋值运算符的左侧必须是变量或属性"。说明"a"+1不是一个变量而是一个数据.

2 为动态变量名赋值
为保存着原始数据类型的动态变量名赋值,可以使用set语句或者[],引用类型的变量是不能赋值的.

例6 使用set语句
set ("a"+1,0);
trace(a1);//0
例7 使用方括号
this["a"+1]=0
trace(a1);

四 获取动态变量名中的值
获取动态变量中的值可以使用[]和eval函数.
例8 使用方括号
第一帧初始化一个变量
i=0;
按钮产生动态的变量名
on (release) {
i++;
this["a"+i] = i//为动态变量名赋值;
b = this["a"+i]//获取动态变量名中的值;
trace(b);
}
例9 eval函数
第一帧初始化一个变量
j=0;
按钮产生动态的变量名
on (release) {
j++;
set("c"+j, j);//为动态变量名赋值;
b = eval("c"+j);//获取动态变量名中的值;
trace(b);
}

可见方括号[]和eval函数的本质就是是将字符串转换为标识符。


作者:Poster:liujihome 分类:Category:学习体会 回复Comments:  引用Trackback:  阅读Read: 

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}
留言回复(带*号为必填)Post Comment(* must be)

作 者Author:

 主 页Homepage:

 邮 箱Email:

内 容Content:

 选 项option:使用表情Enable Smile转换UBBEnable UBB记住我Remember me

 验证码Verify Code:验证码