2012-08-22 60 views
3

在ActionScript中,我发现,铸造日期的日期并将其分配给一个日期类型的变量抛出一个TypeError:为什么在ActionScript中将日期转换为日期失败?

var date : Date = Date(new Date(2012, 01, 01)); 

Error #1034: Type Coercion failed: cannot convert "Wed Aug 22 17:06:54 GMT+1000 2012" to Date. 

这显然是错误的,但我想知道为什么发生。我的理论是,日期转换,如数字转换,已被覆盖,试图转换给定的类型,而不是只是施放它。

有趣的是,铸造其他任何一个日期,并将其分配给一个日期也将失败:

var date : Date = Date("1/2/3"); 
var date : Date = Date(123); 

// (Both fail) 

但其分配给对象成功:

var object : Object = Date(new Date(2012, 01, 01)); 
var object : Object = Date("1/2/3"); 
var object : Object = Date(123); 

// (All succeed) 

回答

5

AS3可以非常混乱和不一致有时。 基本上你不会在该代码示例中投射任何东西。

AS3具有一些全局camelCased函数,它们将优先于铸造操作符。 矢量也有一个类似的全局函数。

当你做Date(bla)没有新的操作符时,它显然创建了该日期的字符串表示形式...试着用as操作符来转换。

+1

小心数组转换:'var a:Array = Array([1,2,3])'将创建一个新的数组,其中包含数组''1,2,3]'作为其第一个也是唯一的元素。铸造只能这样做:'var a:Array = [1,2,3] as Array' – RIAstar

+0

啊,谢谢,这解释了它。这些全局功能是否有文档? –

+0

从这里开始,有一个DL'able拉链,但他们埋葬的东西。寻找“顶级”对象。它本质上是主要的,但11.2或11.3播放器添加了一个基本的JSON对象。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html –

1

通常你应该得到一个编译器警告有关此问题的,如果编译器参数

<!-- Invalid Date cast operation. --> 
<warn-bad-date-cast>true</warn-bad-date-cast> 

存在于你的flex-config.xml

+0

对,谢谢,我不知道。 –