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.

这显然是错误的,但我想知道为什么会这样。我的理论是 Date 强制转换,就像 Number 强制转换一样,已经被覆盖以尝试转换给定的类型,而不仅仅是强制转换它。

有趣的是,将任何其他内容转换为 Date 并将其分配给 Date 也会失败:

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

// (Both fail)

但是将其分配给 Object 成功:

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

// (All succeed)
4

2 回答 2

5

AS3 有时会非常混乱和不一致。基本上,您不会在该代码示例中强制转换任何内容。

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

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

于 2012-08-22T09:43:00.943 回答
1

通常你应该得到一个关于这个行为的编译器警告,如果编译器参数

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

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

于 2012-08-22T11:31:16.960 回答