About

<#TEMPLATE_INCLUDE_NINEPAGE_ABOUTME#>
  • Dec

    27

    AS3 的一些“奇葩”资料

    • 0 Comments
    • Flash Platform
    • 发布:古树悬叶
    • 引用:0
    • 浏览:

    1、switch 的 default 关键字通常出现在最后,或者可以被省略,但它却可以合法的出现在 switch 语句的任何地方。

    2、switch 的条件表达式与 case 表达式比较的时候,使用的是“===”,而不是“==”。

    3、Flex 和 MXML 中,程序的主类必须放在匿名包中。

    4、使用数组索引访问数组时,如果索引值大于数组的长度,返回undefined,但数组的长度本身并不产生变化。

    5、get 方法会在 set 方法后自动被调用,所以 get 方法里的变量如果用于计数,会被 set 方法搅乱。

    6、函数内的代码如果放在嵌套函数中,在 return 后是可以继续执行的,函数会自动向前引用。

    7、AVM 加载类的时候才执行类初始化程序(静态初始化/静态块)。

    8、即使在严格模式下,以下三种情况也会忽略类型不匹配错误:

    a、无类型表达式赋值给类型表达式。

    b、任何表达式赋值给 Boolean 类型。

    c、任何数值类型实例被用于希望得到不同的数值类型实列。

    9、实例转换类型包含转型,但实例“转型”不同于“转换”类型(这是在玩文字游戏么……听起来好搞):

    A、类型(表达式),这种是转换。

    a、转换成功返回表达式。

    b、转换失败会有两种结果:如果是原生类型,会被强制转换;如果是非原生类型,产生运行时异常。

    B、表达式 as 类型,这种是转型(不是转换)。

    a、转型成功返回表达式。

    b、转型失败返回 null(就算是转型到原生类型失败也只返回 null 值)。

    10、throw 作为编程惯例只抛出 Error 类或它的子类,但实际上它能抛出任意数据类型。

    11、finally 块中的代码一定会被执行,包括在return/continue/break等语句转出时;而且优先执行于外部冒泡捕获异常时的代码。

    12、一个动态类的子类不被当作是动态的,除非子类也包含 dynamic 修饰。

    13、所有动态实例变量都是无类型且公有的(动态实例变量的性能相较于正规的实例变量的性能低一些)。

    14、标识符的规则不适用于中括号“[]”运行符创建的变量。如 obj["111"]这种纯数字标识符也是合法的。

    15、AS3 依旧支持使用 prototype 增强类。

    16、开放的命名集甚至优先于 use namespace 语句的使用(就好像  use namespace 被自动移动到了一个作用域代码块的顶部)。

    17、开放的命名空间对嵌套作用域保持开放。

    18、一个命名空间一旦被开放,就不能被“关闭”,也不能被移除。

    19、使用通配符 * 导入一个包的时候,只是导入了包的 public 命名空间,并没有开放 internal 命名空间。

    20、E4X 分析器默认忽略 XML 注释与处理指令。

    21、当parent()被调用于表示 XML 实例的一个属性时,它返回属性被定义的那个元素。

    22、XML 是动态类,AS推迟类型检查直到运行时。

    23、AS3.0 实现的 E4X 规定引用不存在的 XML 属性时返回一个空的 XMLList 对象,不会产生异常。

    24、XML 的方法有可能会被“转发”XMLList,但并不涉及类型“转换”,所以当需要类型检验时,一个 XMLList 并不能自动转换成 XML 类型,需要显示引用 XML 实例。

    25、XMLList 中的 XML 元素名并非变量名,使用 for - in 可以遍历出它们的变量名为“0、1、2……”

    26、谓词过滤之前可以先使用 hasOwnPropety() 来检查属性或元素是否存在。

    27、如果在加载策略文件之后立即调用加载数据的命令,FlashPlayer 会在加载数据之前自动等待策略文件的加载。

    28、注册在事件目标阶段的侦听器,如果 usecapture 被设置为 true,就永远不会被触发了。

    29、关于事件流在传播过程中的奇葩情况老贴《AS3事件流机制中二个重要的应用知识

    30、当一个输入法 IME 在使用的时候,键盘事件相关的实例变量keyCode和charCode是不被支持的。

    31、如果通过 TimerEvent.TIMER 事件来更新屏幕,最多可以产生十次(10倍于帧速)。

    32、调用 Graphics 实例的 clean() 方法后,对象的线型会被还原成为 undefined,画笔位置还原为 0,0。

    33、和 appendText 不同,“+=”运算符将文本域中的所有文本格式重置为默认文本格式;并且“+=”的性能也低。

    34、即使被 FlashPlayer 打开的第一个 SWF 文件从舞台上被移除,它仍然被当作舞台拥有者,并且控制相对URL 解析。

    35、使用 Socket 类和 Loader 类的 loadBytes()方法结合使用,可以防止被加载的资源出现在缓冲区(如WIN 系统的IE临时文件夹)。

    36、对于模运算符,如果运算的对象不是整数,可能会出现一些意外的小数。

    37、in 运算符可以用来判断一个对象是否作为另一个对象的键或索引,存在返回 true,否则就是 false。

    38、函数如果使用了...(rest)关键字,那么 arguments 就不能再使用了。

    39、函数语句定义法定义的函数本质:MethodClosure 类不是动态类;函数直接量表达式定义的函数本质:Function-N 是动态类。

    • Tags:
    • 2016 / 12 / 27
    相关文章:
      Post Comment.

      发表评论