as3备忘六-数据类型(类型检查)
1、as3会进行类型检查,看数据类型是否匹配。2、数据类型不匹配的几种情况
[*]声明了一个变量的类型,但是赋给它非此类型的值:
var num:Number;num = "str';
[*]声明的参数类型和参数值不同:function test(p:String):void{}test(3);
3、何时检查?可以在编译时检查,也可以在运行时检查。编译分为两种模式,严格模式和标准模式。严格模式会在编译时执行类型检查,标准模式则不会;但两种模式都会在运行时检查。
4、严格模式下退出类型检查。在严格模式下也可以避免进行类型检查,通过使用无类型变量。
例一:
function test1(p):void{ trace(p);}var a:Number = 10;var b:String = "Hello";test1(a);test1(b);例二:
function test2(p:String):void{ trace(p);}var a:* = 10test2(a); 在例一和例二中,编译时都不会报错。因为,例一中,函数test1的参数声明为无类型的,它就可以接收任何类型的参数;例二中,虽然函数test2的参数类型为字符串,但我们传进去的参数为无类型的。
但是例二中会产生运行时错误,因为到运行时就会发现传进的参数是数字型的,和声明的参数类型不匹配。
5、使用标准模式编译,实际上是把类型检查推迟到运行时进行,这样可以实现类的“上传”功能。
//定义class ClassA extends ClassB{ var name:String;}//调用var some:ClassB = new ClassA();some.name="some"; 如上,我们定义了ClassA,它继承自ClassB。ClassA定义了自己的一个属性name。在接下来的调用中,我们声明了一个ClassB类型的变量some,但我们赋给它了一个ClassA的实例,这是合法的,这就叫做“上传”。但接下来,我们给some的属性name赋值,但属性name并不属于ClassB,如果在严格模式下就会产生编译错误,但不会产生运行时错误。
6、is运算符。用于测试变量或表达式是否为给定数据类型的成员,返回true或false。
假设:
[*]存在类A
[*]类A继承类B
[*]类A实现接口IM
[*]类B继承类C
[*]类C实现接口IN
有:
var a:A=new A();a is A; //truea is B; //truea is C; //truea is IM;//truea is IN;//true//B、C为A的父类,IM、IN为A实现的接口 上面的每个表达式都为true;
和instanceof的不同,将is换成instance:
var a:A=new A();a instanceof A; //truea instanceof B; //truea instanceof C; //truea instanceof IM;//falsea instanceof IN;//false//B、C为A的父类,IM、IN为A实现的接口 可以看到后两项为false,可以看出两者的不同:is可以检查接口,instance不能,所以我们应该用is
7、as运算符。功能和is一样,唯一的区别就是返回值,is返回true时,as返回测试的对象或表达式,is返回false,as返回null.
var a:A=new A();a as A; //返回对象aa as B; //返回对象aa as C; //返回对象aa as IM;//返回对象aa as IN;//返回对象aa as XX;//返回null//B、C为A的父类,IM、IN为A实现的接口 本文地址:http://kino.iteye.com/blog/236381,转载请注明,谢谢。
页:
[1]