当前位置: 代码迷 >> Web前端 >> as3:类型转换、字面值、恒量、运算符、语句(for in和for each in)
  详细解决方案

as3:类型转换、字面值、恒量、运算符、语句(for in和for each in)

热度:286   发布时间:2012-11-03 10:57:42.0
as3:类型转换、字面值、常量、运算符、语句(for in和for each in)
先说一下数据类型:

基元数据类型包括 Boolean、int、Null、Number、String、uint 和 void。ActionScript
核心类还定义下列复杂数据类型:Object、Array、Date、Error、Function、RegExp、
XML 和 XMLList。

 

1、类型转换就是将一个对象的类型转换成另外的一种类型(它有资格转换,如果没有就会出错)。


2、什么时候需要类型转换? 简单来说就是,当需要一个特定类型的值时,而给定的值确不是该类型,这时就需要转换,但不一定成功!大概有下面几种:

    * 变量赋值,当无值和变量类型不匹配时,就会转换,如果不成功就会报类型不匹配的错误。
    * 传参,当传的参数和参数类型不一致时。
    * 返回值,当返回的值和声明的返回类型不一致时。
    * 当进行加法运算时,可能存在需要转换的地方。
    * 当你需要一个特定类型的对象时,可能去把一个对象转换成另外一种类型时。

3、转换方式有隐式转换和显示转换 (很多语言里都有就不说了)。在严格模式下尽量使用显示转换。

 

4、可以将任何类型的对象转换成int,uint,Number,Boolean,String。 至于具体转换的规则可以查看其他资料。对于int,uint,Number来说,当发现不能转换数字时,int,uint就会把它转成0,而Number转换成NaN.


5、字面值(摘书自《ActionScript3.0 编程》)

“字面值”是直接出现在代码中的值。 下面的示例都是字面值:
Java代码

   1. 17  
   2. "hello"  
   3. -3  
   4. 9.4  
   5. null  
   6. undefined  
   7. true  
   8. false  

17
"hello"
-3
9.4
null
undefined
true
false

 

字面值还可以组合起来构成复合字面值。数组文本括在中括号字符 ([]) 中,各数组元素之间用逗号隔开。数组文本可用于初始化数组。下面的几个示例显示了两个使用数组文本初始化的数组。您可以使用 new 语句将复合字面值作为参数传递给 Array 类构造函数,但是,您还可以在实例化下面的 ActionScript 核心类的实例时直接赋予字面值:Object、Array、String、Number、int、uint、XML、XMLList 和 Boolean。
Java代码

   1. // 使用 new 语句。  
   2. var myStrings:Array = new Array(["alpha", "beta", "gamma"]);  
   3. var myNums:Array = new Array([1,2,3,5,8]);  
   4. // 直接赋予字面值。  
   5. var myStrings:Array = ["alpha", "beta", "gamma"];  
   6. var myNums:Array = [1,2,3,5,8];  

// 使用 new 语句。
var myStrings:Array = new Array(["alpha", "beta", "gamma"]);
var myNums:Array = new Array([1,2,3,5,8]);
// 直接赋予字面值。
var myStrings:Array = ["alpha", "beta", "gamma"];
var myNums:Array = [1,2,3,5,8];

 

字面值还可用来初始化通用对象。通用对象是 Object 类的一个实例。 对象字面值括在大括号 ({}) 中,各对象属性之间用逗号隔开。每个属性都用冒号字符 (:) 进行声明,冒号用于分隔属性名和属性值。可以使用 new 语句创建一个通用对象并将该对象的字面值作为参数传递给 Object 类构造函数,也可以在声明实例时直接将对象字面值赋给实例。下面的示例创建一个新的通用对象,并使用三个值分别设置为 1、2 和 3 的属性(propA、propB 和 propC)初始化该对象:
Java代码

   1. // 使用 new 语句。  
   2. var myObject:Object = new Object({propA:1, propB:2, propC:3});  
   3. // 直接赋予字面值。  
   4. var myObject:Object = {propA:1, propB:2, propC:3};  

// 使用 new 语句。
var myObject:Object = new Object({propA:1, propB:2, propC:3});
// 直接赋予字面值。
var myObject:Object = {propA:1, propB:2, propC:3};


 

6、常量。常量是指具有无法改变的固定值的属性。只能为常量赋值一次,而且必须在最接近常量声明的位置赋值。用const 代替var来创建。

    * 将常量声明为类的成员,则只能在声明过程中或者在类构造函数中为常量赋值。
      Java代码
         1. class A  
         2. {  
         3.     public const MINIMUM:int = 0;  
         4.     public const MAXIMUM:int;  
         5.     public function A()  
         6.     {  
         7.         MAXIMUM = 10;  
         8.     }  
         9. }  
        10.   
        11. var a:A = new A();  
        12. trace(a.MINIMUM); // 0  
        13. trace(a.MAXIMUM); // 10  

      class A
      {
          public const MINIMUM:int = 0;
          public const MAXIMUM:int;
          public function A()
          {
              MAXIMUM = 10;
          }
      }

      var a:A = new A();
      trace(a.MINIMUM); // 0
      trace(a.MAXIMUM); // 10

       上面是合法的。
    * 如果您尝试在类的外部设置 MAXIMUM 的初始值,将会出现运行时错误。
      Java代码
         1. class A  
         2. {  
         3.     public const MINIMUM:int = 0;  
         4.     public const MAXIMUM:int;  
         5. }  
         6. var a:A = new A();  
         7. a["MAXIMUM"] = 10; // 运行时错误  

      class A
      {
          public const MINIMUM:int = 0;
          public const MAXIMUM:int;
      }
      var a:A = new A();
      a["MAXIMUM"] = 10; // 运行时错误

       

7、运算符,记一下主要运算符 (其他运算符和java差不多)

    * []                        初始化数组
    * {x:y}                 初始化对象
    * ()                      对表达式进行分组
    * f(x)                    调用函数
    * new                    调用构造函数
    * x.y x[y]             访问属性
    * <></>              初始化XMLList 对象(E4X)
    * @                        访问属性(E4X)
    * ::                        限定名称 (E4X)
    * ..                        访问子级XML元素 (E4X)

8、as3中的语句大多和java中的差不多,只是要注意一下循环语句for in和 for each in

    * for..in 循环用于循环访问对象属性或数组元素
      Java代码
         1. var myObj:Object = {x:20, y:30};  
         2. for (var i:String in myObj)  
         3. {  
         4.      trace(i + ": " + myObj[i]);  
         5. }  
         6. // 输出:  
         7. // x: 20  
         8. // y: 30  

      var myObj:Object = {x:20, y:30};
      for (var i:String in myObj)
      {
           trace(i + ": " + myObj[i]);
      }
      // 输出:
      // x: 20
      // y: 30

       可以使用 for..in 循环来循环访问通用对象 的属性 (不按任何特定的顺序来保存对象的属性,因此属性可能以看似随机的顺序出现)
      Java代码
         1. var myArray:Array = ["one", "two", "three"];  
         2. for (var i:String in myArray)  
         3. {  
         4.      trace(myArray[i]);  
         5. }  
         6. // 输出:  
         7. // one  
         8. // two  
         9. // three  

      var myArray:Array = ["one", "two", "three"];
      for (var i:String in myArray)
      {
           trace(myArray[i]);
      }
      // 输出:
      // one
      // two
      // three

       还可以循环访问数组中的元素 .
      注意,循环的是属性名称,通过此名称去取属性值,和javascipt类似。
      如果对象是自定义类的一个实例,则除非该类是动态类 ,否则将无法循环访问该对象的属性 。即便对于动态类的实例 ,也只能循环访问动态添加的属性 。
    * for each..in 循环用于循环访问集合中的项目, 它可以是 XML 或 XMLList 对象中的标签、对象属性保存的值或数组元素。
      访问通用对象的属性。
      Java代码
         1. var myObj:Object = {x:20, y:30};  
         2. for each (var num in myObj)  
         3. {  
         4.     trace(num);  
         5. }  
         6. // 输出:  
         7. // 20  
         8. // 30  

      var myObj:Object = {x:20, y:30};
      for each (var num in myObj)
      {
          trace(num);
      }
      // 输出:
      // 20
      // 30

       循环访问 XML 或 XMLList 对象
      Java代码
         1. var myXML:XML = <users>  
         2.                                  <fname>Jane</fname>  
         3.                                  <fname>Susan</fname>  
         4.                                  <fname>John</fname>  
         5.                             </users>;  
         6. for each (var item in myXML.fname)  
         7. {  
         8.      trace(item);  
         9. }  
        10. /* 输出 
        11. Jane 
        12. Susan 
        13. John 
        14. */  

      var myXML:XML = <users>
                                       <fname>Jane</fname>
                                       <fname>Susan</fname>
                                       <fname>John</fname>
                                  </users>;
      for each (var item in myXML.fname)
      {
           trace(item);
      }
      /* 输出
      Jane
      Susan
      John
      */

       循环访问数组中的元素
      Java代码
         1. var myArray:Array = ["one", "two", "three"];  
         2. for each (var item in myArray)  
         3. {  
         4.     trace(item);  
         5. }  
         6. // 输出:  
         7. // one  
         8. // two  
         9. // three  

      var myArray:Array = ["one", "two", "three"];
      for each (var item in myArray)
      {
          trace(item);
      }
      // 输出:
      // one
      // two
      // three

       注意 观察:,for each..in循环中的迭代变量包含属性所保存的值 ,而不包含属性的名称。
      如果对象是密封类的实例,则您将无法循环访问该对象的属性。即使对于动态类的实例,也无法循环访问任何固定属性 (即,作为类定义的一部分定义的属性)。



本文地址:http://kino.iteye.com/blog/237240
  相关解决方案