这三个声明之间有什么区别吗?
var x;
var y:Object;
var z:*;
AS 中有什么不是Object
?
这三个声明之间有什么区别吗?
var x;
var y:Object;
var z:*;
AS 中有什么不是Object
?
var x;
并且var x:*;
对编译器意味着完全相同的东西——变量可以接受任何类型。使用:*
而不是省略类型来增强代码的可读性。
实际上,var x:Object;
是等价的,因为正如您所指出的,一切都来自 Object. 但是,编译器对它的处理不同,如果您访问的是非对象属性,它往往会稍微慢一些。此外,正如其他答案所指出的,尝试分配undefined
给 Object 会自动将其转换为null
.
:*
如果您的变量可以接受多个不相关类型的值,我建议使用,并且:Object
在将 Object 用作关联数组时使用。
如果您希望 a具有使用类型的值,那么一切都是undefined
如此。Object
var
undefined
*
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
主要区别在于*
可以分配undefined
和命名空间,而Object
不能。其他一切都很好。
我建议Object
尽可能使用*
AVM 中的一些奇怪之处。
在您的代码中,x 没有类型化,y 类型化为 Object 类(所有 ActionScript 类的基础类),z 类型化为任何类型的类。这样做的结果是,每当您需要引用这些变量的公共成员时,您要么需要将它们转换为您要使用的类的实例,要么(在您的 y 对象的情况下,以及任何其他非类型变量),您必须y.hasOwnProperty("propertyName")
在引用它之前测试是否。
通常你只会看到方法参数中的 * 可以接受不止一种类型的类。例如,您可能有一个事件处理程序,例如
private function myHandler(event:*) : void {
//statements
}
其中 event 可以引用任何类型的事件,并且您的方法的代码将确定在对其进行任何操作之前是哪种类型。