引用类型:存储引用,指向要操作的对象
Exp2.a1,b1同时指向了数组[1,2,3]
var a1:Array= new Array(1,2,3);
trace(a1); //输出a1为1, 2,3
var b1:Array = a1 ;
b1[0] = 5;
trace(a1); //输出a1为5,2,3,值已经被b1修改了
trace(b1); //输出b1为5,2,3
AS3中的基本数据类型是Boolean,int ,Number,String,uint,值类型也是这么几种,除此都是引用类型。
java的的数据类型分有基本类型 和引用类型
基本数据类型有8大:byte,char ,short ,long, int, float ,double, boolean
引用类型有3大:类.接口.数组
AS值类型也是引用存值。
Java基本类型是直接持有值。
- 三元运算符
test ? expression1 : expression2
test
任何 Boolean 表达式。
test 为 true时返回的表达式expression1 。可能是逗点表达式。
test 为 false时返回的表达式expression2 。可能是逗点表达式。
Exp1
var a :int = 3;
var b: int = a;
b = 9; //改变b的值为9
trace(a); //3
trace(b); //9
(a==5)?trace(a):trace(b) //9
4.typeof , is ,as
var my :String =“I LOVE YOU”;
trace (typeof my); // string。typeof:返回数据类型
trace (my is String); // true。is:判断数据类型
trace (my is Number); // false。不是Number数据类型
trace (my as String); //I LOVE YOU。as:判断数据类型,并返回my值
trace (my as Number); //null。不是Number数据类型,并返回null
5.in
判断一个对象是否作为另外一个对象的键(Key)或索引
var a:Array=[1,2,3,4,5];
trace(2 in a); // true
6.delete
删除对象任意一个实例的属性
Exp
var a:Array=[1,2,3,4,5];
trace(a); //1,2,3,4,5
delete a[2];
trace(a); //1,2,4,5
- AS3允许表达式的值不是Boolean值,会自动转换成相应的Boolean值
8.for …in & for each …in 枚举集合的元素
var books:Object = {
a:“《LOVE IS EVERYTHING》”,
b:“《FUCK YOUR BABY》”,
c:“《I HIT YOU》”
}
for (var k in books){
trace(“key name: “+k+”\t value:”+books[k]);
}
/* \t在正则表达式中是匹配一个制表符,通过键值访问
输出:
key name: a value:《LOVE IS EVERYTHING》
key name: b value:《FUCK YOUR BABY》
key name: c value:《I HIT YOU》
*/
for each (var k in books){
race(k);
}
/* 直接访问成员
《LOVE IS EVERYTHING》
《FUCK YOUR BABY》
《I HIT YOU》
*/
8.arguments.callee
- == 与===的区别
10.AS3不支持抽象类(可用某些技巧实现抽象类),也不能直接实现单例模式(可以用包外类)
11.AS3不支持方法的重载,可以用…rest实现
12. …(rest) 参数
ActionScript 3.0 中引入了一个称为 …(rest)参数的新参数声明。此参数可用来指定一个数
组参数以接受任意多个以逗号分隔的参数。此参数可以拥有保留字以外的任意名称。此参数
声明必须是最后一个指定的参数。使用此参数会使 arguments 对象变得不可用。尽管 …(rest)
参数提供了与 arguments 数组和 arguments.length属性相同的功能,但是它不提供与
arguments.callee 类似的功能。使用 …(rest)参数之前,应确保不需要使用arguments.callee。
下面的示例使用 …(rest) 参数(而非 arguments对象)来重写 traceArgArray() 函数:
function traceArgArray(… args):void
{
for (var i:uint = 0; i < args.length; i++)
{
trace(args[i]);
}
}
traceArgArray(1, 2, 3);
// 输出:
// 1
// 2
// 3
- 函数闭包
“函数闭包”是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函数作用域链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位置执行函数,都会创建函数闭包。函数闭包保留定义它们的作用域,这样,在将函数作为参数或返回值传递给另一个作用域时,会产生有趣的结果。
例如,下面的代码创建两个函数:foo() (返回一个用来计算矩形面积的嵌套函数
rectArea())和 bar()(调用 foo() 并将返回的函数闭包存储在名为 myProduct的变量中)。即使 bar() 函数定义了自己的局部变量 x(值为 2),当调用函数闭包 myProduct()时,该函数闭包仍保留在函数 foo()中定义的变量 x (值为 40)。因此, bar()函数将返回值 160,而不是 8。
function foo():Function
{
var x:int = 40;
function rectArea(y:int):int // 定义函数闭包
{
return x * y
}
return rectArea;
}
function bar():void
{
var x:int = 2;
var y:int = 4;
var myProduct:Function = foo();