为了保障原创作者在本站发表文章的利益, 并维护本站原创的精神, 特声明: RIAShanghai对有以下任何情况之一的文章将不通知作者并直接进行快意删除:
- 非原创, 或者原创但一文多发;
- 各种形式的广告与吹擂;
- 不符合本站文章格式.
欢迎各位读者监督. 谢谢合作. 另: 作为Adobe正式的UG, 我们将把Adobe不定期分发的软件,书籍及各种纪念品赠送给发文活跃的作者, 共同进步.
在ActionScript有两种type cast: var c1:ArrayCollection = c as ArrayCollection; var c2:ArrayCollection = ArrayCollection(c); 前者中c可以为null, 而后者要求c不可为null,否则throw Error.
如下代码:
var obj:Object = [1, 2, 3];
trace(Array(obj).length);
运行后输出代码为3还是1?
答案是1. Array(*)永远是创建一个新Array而不是进行cast,所以Array(obj)就是:一个只含有一个元素的Array,而这个元素本身是一个含有三个元素的Array.
同样的String(*)永远是创建一个新的String而不是进行cast, 所以String(null)返回是“null”String而不是throw Error.
看上去这些貌似是特例,而背后真正的原因是function的precedence要高于type cast - precedence即优先序,如乘除的优先序比加减高;Array(), Boolean(), int(), Number(), String(), Vector(), XML(), XMLList()等都是在top level package定义的function, 所以类似Array(*)这些就不是type cast了而是function call了.