*和Object之间有什么区别

时间:2013-06-05 07:05:06

标签: actionscript-3

假设我有一个有几个属性的类:

public class MyClass {
   public var fooProp:*;
   public var barProp:Object;
}

实际上,它们之间有什么区别?我是否可以在以后分配给fooProp的变量类型,我无法分配给barProp?

1 个答案:

答案 0 :(得分:6)

只有无类型变量才能保存值undefined。无类型变量是缺少任何类型注释的变量,或者使用星号*符号进行类型注释。

From ActionScript data type descriptors

  

在以前版本的ActionScript中,没有类型的变量   注释自动分配了对象数据类型。这不是   在ActionScript 3.0中更长时间,现在包含了a的想法   真正无类型的变量。现在没有类型注释的变量   被认为是无类型的。如果您愿意向读者表明您的想法   代码,你的意图是留下一个变量无类型,你可以使用   类型注释的新星号(*)符号,即   相当于省略了类型注释。以下示例显示   两个等效语句,两者都声明了一个无类型变量:

var x 
var x:*
     

只有非类型化变量才能保持未定义的值。如果你试图   将值undefined分配给具有数据类型Flash的变量   Player或Adobe AIR会将undefined值转换为默认值   该数据类型的值。对于Object数据类型的实例,   默认值为null,表示Flash Player或Adobe AIR将   如果尝试分配undefined,则将undefined值转换为null   到一个Object实例。

举个例子:

var t:* = undefined;
trace(t); // outputs: undefined

var t:Object = undefined;
trace(t); // outputs: null