为什么在ActionScript中将日期转换为日期会失败?

3
在ActionScript中,我发现将日期(Date)强制转换成日期(Date),并将其分配给一个Date类型的变量会抛出TypeError异常。
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)
2个回答

5

AS3有时会非常混乱和不一致。 基本上在那个代码示例中没有进行任何类型转换。

AS3有一些全局的驼峰式函数,它们将优先于强制类型转换运算符。 Vector也有类似的全局函数。

当您使用Date(bla)而没有new运算符时,它显然会创建该日期的字符串表示形式...尝试使用as运算符进行类型转换。


1
注意数组转换:var a:Array = Array([1, 2, 3])将创建一个新的数组,其中包含数组[1, 2, 3]作为其第一个和唯一元素。强制类型转换只能像这样完成:var a:Array = [1, 2, 3] as Array - RIAstar
啊,谢谢,这解释清楚了。这些全局函数有文档吗? - Will Madden
从这里开始,有一个可下载的压缩包,但是他们把它埋了起来。寻找“顶级”对象。这本质上是原始对象,但11.2或11.3播放器添加了一个原始JSON对象。http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html - Mike Petty

1
通常情况下,如果编译器参数存在此行为,您应该会收到编译器警告。
<!-- Invalid Date cast operation. -->
<warn-bad-date-cast>true</warn-bad-date-cast>

存在于您的flex-config.xml中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接