AS3 初学笔记 actionscript-之变量

变量

变量可用来存储程序中使用的值。要声明变量,必须将 var 语句和变量名结合使用。在 ActionScript 2.0 中,只有当您使用类

型注释时,才需要使用 var 语句。在 ActionScript 3.0 中,总是需要使用 var 语句。例如,下面的 ActionScript 行声明一个名

为 i 的变量:

var i;

如果在声明变量时省略了 var 语句,则在严格模式下会出现编译器错误,在标准模式下会出现运行时错误。例如,如果以前未

定义变量 i,则下面的代码行将产生错误:

 i; // error if i was not previously defined

要将变量与一个数据类型相关联,则必须在声明变量时进行此操作。在声明变量时不指定变量的类型是合法的,但这在严格模

式下会产生编译器警告。可通过在变量名后面追加一个后跟变量类型的冒号 (:) 来指定变量类型。例如,下面的代码声明一个

int 类型的变量 i:

 var i:int;

可以使用赋值运算符 (=) 为变量赋值。例如,下面的代码声明一个变量 i 并将值 20 赋给它:

 var i:int;
 i = 20;

您可能会发现在声明变量的同时为变量赋值可能更加方便,如下面的示例所示:

 var i:int = 20;

通常,在声明变量的同时为变量赋值的方法不仅在赋予基元值 (如整数和字符串)时很常用,而且在创建数组或实例化类的实

例时也很常用。下面的示例显示了一个使用一行代码声明和赋值的数组。

 var numArray:Array = ["zero", "one", "two"];

可以使用 new 运算符来创建类的实例。下面的示例创建一个名为 CustomClass 的实例,并向名为 customItem 的变量赋予对该

实例的引用:

 var customItem:CustomClass = new CustomClass();

如果要声明多个变量,则可以使用逗号运算符 (,) 来分隔变量,从而在一行代码中声明所有这些变量。例如,下面的代码在一行

代码中声明 3 个变量:

 var a:int, b:int, c:int;

也可以在同一行代码中为其中的每个变量赋值。例如,下面的代码声明 3 个变量 (a、b 和 c)并为每个变量赋值:

 var a:int = 10, b:int = 20, c:int = 30;

尽管您可以使用逗号运算符来将各个变量的声明组合到一条语句中,但是这样可能会降低代码的可读性。

了解变量的作用域

变量的范围是指可在其中通过词汇引用来访问变量的代码区域。全局变量是指在代码的所有区域中定义的变量,而局部变量是

指仅在代码的某个部分定义的变量。在 ActionScript 3.0 中,始终为变量分配声明它们的函数或类的作用域。全局变量是在任

何函数或类定义的外部定义的变量。例如,下面的代码通过在任何函数的外部声明一个名为 strGlobal 的全局变量来创建该变

量。从该示例可看出,全局变量在函数定义的内部和外部均可用。

 var strGlobal:String = "Global";
 function scopeTest()
 { 

trace(strGlobal); // Global
 }
 scopeTest();
 trace(strGlobal); // Global

可以通过在函数定义内部声明变量来将它声明为局部变量。可定义局部变量的最小代码区域就是函数定义。在函数内部声明的

局部变量仅存在于该函数中。例如,如果在名为 localScope() 的函数中声明一个名为 str2 的变量,该变量在该函数外部将不可

用。

 function localScope()
 { 

var strLocal:String = "local";
 }
 localScope();
 trace(strLocal); // error because strLocal is not defined globally

如果用于局部变量的变量名已经被声明为全局变量,那么,当局部变量在作用域内时,局部定义会隐藏 (或遮蔽)全局定义。

全局变量在该函数外部仍然存在。例如,下面的代码创建一个名为 str1 的全局字符串变量,然后在 scopeTest() 函数内部创建一

个同名的局部变量。该函数中的 trace 语句输出该变量的局部值,而函数外部的 trace 语句则输出该变量的全局值。

 var str1:String = "Global";
 function scopeTest ()
 { 

var str1:String = "Local"; 

trace(str1); // Local
 }
 scopeTest();
 trace(str1); // Global

与 C++ 和 Java 中的变量不同的是, ActionScript 变量没有块级作用域。代码块是指左大括号 ({) 与右大括号 (}) 之间的任意

一组语句。在某些编程语言 (如 C++ 和 Java)中,在代码块内部声明的变量在代码块外部不可用。对于作用域的这一限制称

为块级作用域,ActionScript 中不存在这样的限制,如果您在某个代码块中声明一个变量,那么,该变量不仅在该代码块中可

用,而且还在该代码块所属函数的其它任何部分都可用。例如,下面的函数包含在不同的块作用域中定义的变量。所有的变量

均在整个函数中可用。

 function blockTest (testArray:Array)
 { 

var numElements:int = testArray.length; 

if (numElements > 0) 

{ 

var elemStr:String = "Element #"; 

for (var i:int = 0; i < numElements; i++) 

{ 

var valueStr:String = i + ": " + testArray[i]; 

trace(elemStr + valueStr); 

} 

trace(elemStr, valueStr, i); // all still defined 

} 

trace(elemStr, valueStr, i); // all defined if numElements > 0
 } 

 blockTest(["Earth", "Moon", "Sun"]);

有趣的是,如果缺乏块级作用域,那么,只要在函数结束之前对变量进行声明,就可以在声明变量之前读写它。这是因为存在

一种名为提升 的方法,该方法表示编译器会将所有的变量声明移到函数的顶部。例如,下面的代码会进行编译,即使先有 num

变量的初始 trace() 函数后声明 num 变量也是如此:

 trace(num); // NaN
 var num:Number = 10;
 trace(num); // 10

但是,编译器将不会提升任何赋值语句。这就说明了为什么 num 的初始 trace() 会生成 NaN (而非某个数字) , NaN 是

Number 数据类型变量的默认值。这意味着您甚至可以在声明变量之前为变量赋值,如下面的示例所示:

 num = 5;
 trace(num); // 5
 var num:Number = 10;
 trace(num); // 10
默认值

默认值是设置变量的值之前变量中包含的值。首次设置变量的值实际上就是初始化变量。如果您声明了一个变量,但是没有设

置它的值,则该变量便处于未初始化状态。未初始化的变量的值取决于它的数据类型。下表说明了变量的默认值,并按数据类

型对这些值进行组织:

数据类型 默认值
Boolean false
int 0
Number NaN
Object null
String null
uint 0
未声明 (与类型注释 * 等效) undefined
其它所有类 (包括用户定义的类) 。 null

对于 Number 类型的变量,默认值是 NaN(而非某个数字) ,NaN 是一个由 IEEE-754 标准定义的特殊值,它表示非数字的

某个值。

如果您声明某个变量,但是未声明它的数据类型,则将应用默认数据类型 *,这实际上表示该变量是无类型变量。如果您还没

有用值初始化无类型变量,则该变量的默认值是 undefined。

对于 Boolean、Number、int 和 uint 以外的数据类型,所有未初始化变量的默认值都是 null。这适用于由 ActionScript 3.0

定义的所有类以及您创建的所有自定义类。

对于 Boolean、Number、int 或 uint 类型的变量,null 不是有效值。如果您尝试将值 null 赋予这样的变量,则该值会转换为

该数据类型的默认值。对于 Object 类型的变量,可以赋予 null 值。如果您尝试将值 undefined 赋予 Object 类型的变量,则该

值会转换为 null。

对于 Number 类型的变量,有一个名为 isNaN() 的特殊的顶级函数,如果变量不是数字,则该函数会返回布尔值 true,否则会

返回 false。

AS3 初学笔记 actionscript-之变量

时间: 2025-01-04 04:36:14

AS3 初学笔记 actionscript-之变量的相关文章

初学笔记(C#事件)

1.声明事件      EventHandler是一个预定义的委托,它定义了一个无返回值的方法.在 .Net Fromwork中,他的格式: public  delegate  void EventHandler (Object  sender, EvenArgs  e) 其中sender的类型为Object,表示时间发布者本身,e用来传递事件的相关信息,数据类型为EvenArgs及其派生类. 标准的EvenArgs并不包含任何事件数据, 因此EventHandler专用于表示不生成数据的事件的

TensorFlow官方文档MNIST初学笔记[二]

TensorFlow官方文档MNIST初学笔记[二] MNIST是一个简单的计算机视觉数据集, 它还包括每个图像的标签, 每个图像是28像素乘以28像素, 我们可以把这个数组变成一个28×28 = 784个数字的向量.MNIST只是一个784维向量空间中的一个点.mnist.train.images具有形状的张量(n维阵列)[55000, 784] 第一维度是图像列表中的索引,第二维度是每个图像中每个像素的索引.对于特定图像中的特定像素,张量中的每个条目是0和1之间的像素强度. MNIST中的每

Lua初学笔记

Lua初学笔记 lua动态类型语言,支持过程式编程.面向对象编程.函数式编程与数据驱动编程. lua -la -lb:命令首先在一个Chunk内先运行脚本文件a,然后运行脚本文件b.(-l参数会调用require,将会在指定的目录下搜索文件). lua -i -la -lb:参数-i要求lua运行指定Chunk后进入交互模式. 运行Chunk的另外一个方式是在交互模式下使用dofile 全局变量:全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

重构笔记——分解临时变量

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42463871         在上一篇文章中介绍了"重构笔记--引入解释性变量".本文将介绍"分解临时变量"这种重构手法.         下面让我们来学习这种重构手法吧. 开门见山         发现:你的程序有某个临时变量被赋值超过一次,它既不是循环变量,也不被用于收集计算结果. 解决:针对每次赋值,创造一个独立.对应的

lisp初学笔记

学习任何知识,都不能仅仅把它们当做知识,更重要的是要把它们在实际编程实践中应用起来,持有这样的学习观念才不至于让你变成学究式的活字典,对于程序员来说这一点尤其重要,你学习的任何语言知识,一定要在实际的程序编写过程中不断练习.不停实践,纸上得来终觉浅,绝知此事须躬行. LispBox 实际上是把 Emacs.Slime.Clozure CL 以及 QuickLisp 集成到一起,使用 LispBox 做开发环境就相当于选择了 Emacs 作为编辑器.选择 Slime 作为交互界面,那么一定要熟悉

flex入门--初学笔记1

环境:flashBuilder + eclipse 4.2 基本控件: 1 <mx:Script> 2 <![CDATA[ 3 import mx.controls.Alert; 4 public function showMsg(msg:String):void{ 5 mx.controls.Alert.show(msg); 6 } 7 ]]> 8 </mx:Script> 9 <mx:Panel title="常用控件" width=&qu

《软件调试的艺术》笔记--检查和设置变量

1.使用print命令查看变量值 使用print命令(简写为p)可以查看变量值. 使用如下的程序1进行测试. #include <stdio.h> struct node{ int index; struct node* next; }; int main(void) { struct node head; head.index = 1; head.next = NULL; int i; for(i=0; i<3; i++){ head.index++; } return 0; } (g

js&#39;初学笔记

之前看过一个博主说的学习前端养成写博客的习惯,我慢慢学着在上面写点东西,记录我的学习. 这段时间把之前学的js基础补上一点,学了一些对数组和字符的操作,split(),将字符串变成数组.join(),数组变为字符串.conca()连接数组. charAt(),charCodeAt(),formCharCode(),slice(start,end),substring(),substr(start,length);indexOf(); 有一些我就不多说了,在这里记下来,以后看看,有兴趣可以看看山冈