2

这三个声明之间有什么区别吗?

var x;
var y:Object;
var z:*;

AS 中有什么不是Object?

4

4 回答 4

3

var x;并且var x:*;对编译器意味着完全相同的东西——变量可以接受任何类型。使用:*而不是省略类型来增强代码的可读性。

实际上,var x:Object;是等价的,因为正如您所指出的,一切都来自 Object. 但是,编译器对它的处理不同,如果您访问的是非对象属性,它往往会稍微慢一些。此外,正如其他答案所指出的,尝试分配undefined给 Object 会自动将其转换为null.

:*如果您的变量可以接受多个不相关类型的值,我建议使用,并且:Object在将 Object 用作​​关联数组时使用。

于 2010-08-02T17:00:26.780 回答
2

如果您希望 a具有使用类型的值,那么一切都是undefined如此。Objectvarundefined*

var a:*=undefined;
trace(a); // will trace undefined

var b:Object=undefined; // you will have a warning at compile time
trace(b); // will trace null
于 2010-08-02T19:18:53.387 回答
1

主要区别在于*可以分配undefined和命名空间,而Object不能。其他一切都很好。

我建议Object尽可能使用*AVM 中的一些奇怪之处。

于 2010-08-02T19:22:16.170 回答
-1

在您的代码中,x 没有类型化,y 类型化为 Object 类(所有 ActionScript 类的基础类),z 类型化为任何类型的类。这样做的结果是,每当您需要引用这些变量的公共成员时,您要么需要将它们转换为您要使用的类的实例,要么(在您的 y 对象的情况下,以及任何其他非类型变量),您必须y.hasOwnProperty("propertyName")在引用它之前测试是否。

通常你只会看到方法参数中的 * 可以接受不止一种类型的类。例如,您可能有一个事件处理程序,例如

private function myHandler(event:*) : void {
  //statements
}

其中 event 可以引用任何类型的事件,并且您的方法的代码将确定在对其进行任何操作之前是哪种类型。

于 2010-08-02T16:57:28.067 回答