当声明变量具有开放数据类型时,在将变量键入为“通配符”(我不确定其正式名称)和键入变量之间是否存在任何差异,尤其是性能差异一个对象?
var myVar:*;
var myVar:Object;
答案 0 :(得分:2)
它不会影响性能。我使用*时,我不知道Object将在运行时使用哪种类型。
来自livedocs:在这些情况下使用*:
- 如果要将类型检查推迟到运行时。你可以使用 无类型属性或表达式 规避编译时类型检查 在严格的模式。但请注意 运行时类型检查分配 无论您使用是否发生声明 严格模式与否。
- 如果要将值undefined存储在属性中。不像 以前版本的ActionScript, value undefined不是。的成员 对象数据类型。你必须使用 用于存储值的非类型化属性 未定义。
答案 1 :(得分:1)
ActionScript 3中的所有变量和类类型都是Object
的子类,因此就功能而言,我认为两者之间没有任何区别。
Object
的某些子类(如int
和Number
的行为类似于堆栈对象(这意味着var firstInt:int = 5
和var secondInt:int = 5
实际上指向相同的{ {1}}),但这并不影响使用通用变量指向它们时的处理方式。
如果我可以冒险猜测,我会说他们添加了通配符作为保存输入的方法,并使C / C ++移民更容易使用Object
指针来引用泛型类型而不是基础void*
类型。
答案 2 :(得分:0)
您可以以相同的方式使用类型。但它们之间存在一些差异。通配符类型具有附加值:未定义。
var a: Object;
var b: *;
var c: *;
trace(a + ": " + getQualifiedClassName(a) + " " + b + ": " + getQualifiedClassName(b) + " " + c + ": " + getQualifiedClassName(c));
b = a;
a = c;
if (a == undefined)
trace("compiles with a warning");