一、在AS3里面,一切都是从对象(Object)那里继承过来的,所以一切数据都是对象,包括运算符、函数那些;
二、像:riaHomeCn 这种第一个单词用小写,其余单词的第一个字母用大写的变量命名方法叫做“骆驼命名法”(算我见识少,我现在才知道可以这样称呼);
三、在AS3里面,变量都是持有引用的,也就是说不像C#语言那样数据类型分为值类型和引用类型:值类型直接存储值,而引用类型存储引用,指向要操作的对象。但AS3里的数据类型分为基元数据类型和复杂数据类型。其中基元数据类型好比值类型,复杂数据类型好比引用类型,别忘了,AS3里面,这两数据也是对象(Object)来的,只是基元数据类型(值类型)是一种不变对象(immutable object)。
基元数据类型(值类型)例子:
var a:int = 3;
var b:int = a;
b = 9;
trace(“a值是:” + a); //输出:a值是:3
trace(“b值是:” + b); //输出:b值是:9
书中是这样写的:
把a的值赋给b后,改变了b的值,a的值并没有因为b值的改变而变化。这就是值类型的特点:直接存值。每个变量的值不因为其它变量的值的改变而改变。
复杂数据类型(引用类型)例子:
var a:Array = new Array(1, 2, 3);
var b:Array = a;
b[0] = 4;
trace(“a值是:” + a); //输出:a值是:4, 2, 3
trace(“b值是:” + b); //输出:b值是:4, 2, 3
书中是这样写的:
同样是把a的值赋给b的值,但b的值改变后,a的值也跟着改变了。很多初学者都不会想到改变b的值会影响到a的值,因此大量的此种类型的程序臭虫(Bug)就会出现。
书中对上述现象的详细解说是这样的(略作修改):
在本例中,第一行代码告诉Flash Player在内存中创建一个数组[1, 2, 3]。然后设置变量a指向这个数组,用正式的话来说就是,把这个数组的引用赋值给变量a。第二行代码中,当我们把a的值赋给b时,其实Flash Player并没有在内存中再创建一个新的数组[1, 2, 3],而是直接把变量a的引用又给了b。因此,b的引用和a的引用完全一样,都是指向原来的数组[1, 2, 3]。所以,当我们通过b变量改变数组值时,就改变了原来的那个唯一的数组。由于b和a控制的都是同一个对象,所以,理所当然,a的输出结果也变了。
还有一个,在AS3里面,声明常量用const关键字,如:
const a:int = 100;
如果我们强制改变它的值,编译器会报错的:
const a:int = 100;
a = 99;
总结一下AS3里面的数据类型:
基础数据类型包括:基元数据类型和复杂数据类型。
基元数据类型:Boolean、int、uint、Number、String;
复杂数据类型:Array、Object。
最后介绍一下typeof、is、as、in和delete
Typeof是用字符串的形式返回对象的类型。语法:
trace( typeof 10 ); //输出:number
is 用来判断一个对象是否属于一种类型,返回的是布尔值,true为属于,false为不属于。而 as 则返回这个对象和null :
trace( 9 is Number ); //输出:true
trace( 9 as Number ); //输出:9
trace( 9 as Array ); //输出:null
in 关键字用来判断一个对象是否作为另一个对象的键(Key)或索引,存在返回true,不存在返回false,如:
var a:Array = [“a”, ”b”, ”b”];
trace( 2 in a ); //数组a含有索引2,所以为true
trace( 3 in a ); //只有3个元素,没有索引为3的元素,所以为false
var b:Object = {name: ”YoungBoy”, age: 20};
trace( “name” in b ); //true,确实有name为键的属性
trace( “age” in b ); //同上
delete 在AS3 中已经不同于AS2了。在AS2中可以使用delete关键字删除对象任意一个的实例属性。但在AS3中,delete关键字的作用已经大大减少了,它只可以用来删除对象的动态实例属性,非动态属性不能删除。
如果要将一个属性所持有的引用删除,将null赋值给该属性即可:
var b:Object = {name: “YoungBoy”, age: 20};
// delete b; //会报错,不能这样删除了
delete b.name; //成功,因为name是b对象的动态属性
trace( b.name ); //输出:undefined
b = null;
trace( b ); //输出:null,那么b变量持有原有对象的引用就删除了
回复Comments
作者:
{commentrecontent}