zoukankan      html  css  js  c++  java
  • type tips

    网上有这么一篇文章,全文如下:http://bbs.9ria.com/blog-220191-18429.html

    AS3中一共有以下六种获取变量类型的方法:

    •   typeof
    •  instanceof
    • getQualifiedClassName
    •   getQualifiedSuperclassName
    •  is
    •  as

     

    typeof运算符用来返回基元数据的类型(所谓基元数据类型是指:intuintBooleanNumberString 除此以外全部都是复杂数据类型)。注意,使用typeof返回复杂数据类型时将始终得到“Object”。

    typeof的使用方法如下例所示:

    var size:int=10;

    var color:uint=0x990000;

    var flag:Boolean=false;

    var num:Number=.5;

    var name:String=”My Name is HuLin”;

    var arr:Array=[1,2,3];

    var obj:Object=new Object();

    var mc:MovieClip=new MovieClip();

    var shape:Shape=new Shape();

    trace(typeof(size));       //int

    trace(typeof(color));    //uint

    trace(typeof(flag));       //Boolean

    trace(typeof(num));     //Number

    trace(typeof(name));   //String

    trace(typeof(arr));       //Object

    trace(typeof(obj));       //Object

    trace(typeof(mc));       //Object

    trace(typeof(shape)); //Object

     

           instanceofAS3以前的ActionScript版本(AS2AS1)中用来判断变量类型的运算符。在AS3中依然可以使用,但是建议不要再用,因为在它可能无法正确判断AS3中新增的数据类型。例如,有如下语句:

           var num:int=5;

           trace(num instanceof int); //false

           显然,这是错误的。在AS3中应当使用is来代替它。

     

           getQualifiedClassName运算符用来返回变量所属的类的类名,用法如下:

           var shap:Shape=new Shape();

    trace(getQualifiedClassName(shap)); //flash.display::Shape

    注意,使用getQualifiedClassName只能返对象的直接归属类的类名,而不能获取整条继承链。

     

    getQualifiedSuperclassName运算符用来返回对象所属类的父类的名称,用法如下:

    var shap:Shape=new Shape();

    trace(getQualifiedSuperclassName(shap));// flash.display::DisplayObject

            

           is运算符,AS强力推荐之法宝。它用来验证指定变量是否属于指定类型,是则返回true,否则返回false。用法如下:

           var shap:Shape=new Shape();

       trace(shap is Shape); //true

           var num:int=5;

           trace(num is Array); //false

     

           as运算符也是AS3中新增的内容。它跟is运算符的用法类似,但是它不像is一样返回trueflash,而是返回对象本身(类型匹配时会将对象转换为匹配类型)null(类型不匹配时)。用法如下:

           var shap:Shape=new Shape();

       trace(shap as Shape);   //[object Shape]

       trace(shap as MovieClip);// null

     

     

     

    但是经过我的测试,关于typeof的描述是不对的,(ide是fb4.6,sdk也是4.6版的)。

    var size:int = 10;
    var color:uint = 0x990000;
    var flag:Boolean = false;
    var num:Number = .5;
    var name:String = "My Name is HuLin";
    var arr:Array = [ 1, 2, 3 ];
    var obj:Object = new Object();
    var mc:MovieClip = new MovieClip();
    var shape:Shape = new Shape();
    trace(typeof(size));
    trace(typeof(color));
    trace(typeof(flag));
    trace(typeof(num));
    trace(typeof(name));
    trace(typeof(arr));
    trace(typeof(obj));
    trace(typeof(mc));
    trace(typeof(shape));

    trace(size instanceof int);
    trace(color instanceof int);

    这段代码在我的电脑上输出如下:

    number
    number
    boolean
    number
    string
    object
    object
    object
    object
    false
    false

    也就是说,typeof和instanceof是一样的,一样识别不出as3种的新类型,在ide中,使用instanceof会提示是deprecated,但typeof却不会有提示。

    但在在开发中也尽量少用typeof。 

    而对于getQualifiedClassName需要注意的是,对于uint和int类型的变量,getQualifiedClassName返回的都是int

    这个就不知道uint和int在底层到底是怎么处理的~

     但对于uint类型的变量a, trace(a is uint)返回的又是true!

    而对于vectior类型的变量v, trace(v is Vector)返回的是flase!

    补充一个,getDefinitionByName通过name获取Class对象。flash.display.Shape 和 flash.display::Shape 这两个都有效!

    2014.03.20补充:

    trace(typeof(null));
    trace(getQualifiedClassName(null));

    输出:

    object
    null

    2014.03.21补充:

    trace(1 as Number); //int,uint,同,

    输出null

    即是:可以看出,Number,int,uint如果用as来转换,会返回null。

    对比

    obj as aClass
    aClass(obj)

    如果类型不匹配的情况下,第一种写法返回null,第二种写法报错,

    类型匹配的情况下,第一种写法的效率要高于第二种!

    所以,尽可能的多用as来转换。

    2014.04.10补充:

    可见,对于不能转换成int的参数,parseInt返回NaN,int返回0
    而parseInt每次都是尽量处理能转行的参数trace(parseInt("456b123"), "=456");

    var v:Vector.<int> = new Vector.<int>();
    trace(v is Vector);
    trace(v);
    trace(getQualifiedClassName(v));
    trace(typeof(v));

     上面代码输出:

    false

    __AS3__.vec::Vector.<int>
    object

  • 相关阅读:
    CTS、CLS、CLR分别作何解释?
    C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
    net中读写数据库需要用到那些类?他们的作用?
    什么叫应用程序域?
    一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
    override与重载的区别
    请编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
    求以下表达式的值,写出您想到的一种或几种实现方法: 12+34+……+m
    什么是强类型系统?
    在下面的例子里
  • 原文地址:https://www.cnblogs.com/tianlanliao/p/3430101.html
Copyright © 2011-2022 走看看