- 论坛徽章:
- 0
|
ActionScript 3 学习笔记(1)2010-01-25
五个月没有碰ActionScript3。趁这两天工作不是很忙,赶紧补补,然后将它学完。先从基础来吧...
* ActionScript 3中所有的数据都是对象。(Everything is an Object.)
* 数据类型:
基本数据类型:int(处理整数)、Number(处理很长又有小数点的数字)、uint(处理很大的整数)、Boolean、String.
复杂的数据类型:Array、Date、Error、Function、RegExp、XML、XMLList。
* 变量的声明:
var 变量名:数据类型; 或者 var 变量名:数据类型 = 值;
var是关键字,用来声明变量。
例如:
var g:int;
var h:int = 1;
var i; //声明变量i,但是没有指定类型,默认为untype
var j:*; //声明变量j,untype
注意: 下面几种是错误的书写方式;
k; //没有用关键字,即没有声明变量,出错
l = 100;
* 变量持有引用(Reference),而引用则指向要操作的对象,实际上是通过操作引用来操作对象。
引用的实现机制:每个对象生成时,都会在内存中请求一块空间来保存它的数据,根据对象的大小和类型,他可能需要占用的空间的大小也不相同,访问对象的时候,我们不是访问对象在内存中的数据,而是通过引用去访问,引用也是一种数据类型,可以把它想象为类似C语言中指针,他只是了对象在内容中的地址。
* 值类型与引用类型的区别:
值类型直接存储值;而引用类型存储引用,指向要操作的对象。ActionScript 3中的值类型有int,Number,uint,String,Boolean。其余的都是应用类型。另外一个特点就是值类型的数据不用new关键字来创建,必须使用new关键字创建的一定不是值类型。
值类型与引用类型使用上的区别:看例子
1)值类型的使用
var a:int = 3;
var b:int = a;
b = 9;
trace("a的值是" + a);
trace("b的值是" + b)
输出结果是:a的值是3
b的值是9
直接存储,每个变量不会因为其他变量的改变而改变。
2)引用类型的使用:
var a:Array = new Array(1,2,3);
var b:Array = a;
b[0] = 4;
trace("a的值是" + a);
trace("b的值是" + b)
输出结果: a的值是4,2,3
b的值是4,2,3
当操作一个引用数据类型时,并没有直接操作数据,而是在操作引用。
* 在Java中,值类型并不是以对象的形式存储的。值类型的变量,存储的不是引用,而是直接容纳了具体的值;在ActionScript 3中则不一样,因为本质上,值类型仍然是对象。那么即使是值类型仍然是引用,而不是直接持有值,但是值类型是一种特殊的对象,叫做不变对象。正式这种的特殊行为为导致了我们对值类型和引用类型并不相同。
* 使用const声明常量。
ActionScript 3中新增加了const关键字,用于声明常量。
如: const i:int = 100; //创建常量i,值为100
对用引用类型而言,常量只能保证持有的引用不变,而不能保证引用对象对象本身的状态不发生变化。如:
const foo:Array = [2,3];
var b:Array = foo;
b[1] = 100;
trace(foo);//输出2,100
//说明foo指向的数组内容发生了变化
foo = [2,4];//这里会报错,常量不能被改变。
*字符串的声明方式:
var tempOne:String; //声明一个String变量,此时未定义,默认为null
var tempTwo:String = ""; //声明一个空的字符床,已经定义
var tempThree:String = new String(); //用包装类来声明,效果同上
var tempFour:String = "abd"; //声明一个内容为abd的字符串
var tempFive:String = new String("abd"); //同上效果相同
var tempSix:String = 'abc'; //也可以使用单引号来声明新字符串
*数组Array的几种声明类型:
var a:Array; //声明一个数组变量a,为null
var b:Array = []; //声明一个空数组b,
var c:Array = new Array(); //效果同上
var d:Array = [1,2,3,4]; //直接用[]操作符常见一个数组
var e:Array = new Array(1,2,3,4); //效果同上
var f:Array = new Array(5); //声明一个长度为5的空数组
*teypeOf , is , as的使用
typeOf是用字符串形式返回对象的类型,trace(typeOf 10);//输出:number
is判断一个对象是否属于一种类型,trace(9 is Number);//输出:true
如果一个对象属于一种类型,as返回一个对象,否则返回null
trace(9 as Number); //输出:9
trace(9 as Array); //输出:null
* in
in关键字用来判断一个对象是否作为另一个对象的键(key)或者索引,存在返回true,不存在返回false。
var a:Array = ["q","w","e"];
trace(2 in a); //数组中有索引2,输出true
trace(3 in a); //数组中没有索引3,输出false
var b:Object = {ary:a,name:"ok"};
trace("ary" in b); //数组中存在以ary为键的属性,输出true
trace("name" in b); //数组中存在以name为键的属性,输出true
import flash.utils.Dictionary;
var c:Dictionary = new Dictionary(); //建立字典对象
c[a] = "a value"; //把数组a最为键
c = "b value"; //把数组b作为键
trace(a in c); //输出true
trace(b in c); //输出true
* delete 关键字用来删除对象的动态实例属性,非动态属性不能删除
var b:Object = {ary:"one",name:"ok"};
delete b.ary; //成功,因为ary为b的动态属性
trace(b.ary); //输出:undefined
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93876/showart_2160017.html |
|