使用"."或"[]"访问对象属性 - 有什么区别?

7
下面的代码(i)和(ii)有什么区别?

(i)

var obj:Object = new Object();
obj.attribute = value ;

(ii)
(二)
var obj:Object = new Object();
obj["key"] = value;

如果我写这个代码,是否会有运行时的影响:

var obj:Object = new Object();
obj.somekey = value1 ;
obj["someKey"] = value2 ;

请解释。
1个回答

21

两者的区别在于查找机制:如果你使用点语法,编译器将会在编译时知道你正在访问该对象的属性。如果你使用方括号语法,则实际的属性查找将在运行时完成,将需要更多的类型检查 - 毕竟,你可以动态地组合键字符串,值可能会改变,或者甚至可能调用函数而不是变量等。

结果是性能上有显著差异:方括号语法执行时间大约比点语法长三倍

下面是一个小的速度测试来说明我的观点:

var start : int = getTimer();

var obj:Object = { something : "something" };

for (var i : int = 0; i < 100000000; i++) {
    var n:String = obj.something;
}

trace ("Time with dot syntax: "+(getTimer() - start));

start = getTimer();

for (i = 0; i < 100000000; i++) {
    var o:String = obj["something"];
}

trace ("Time with bracket syntax: "+(getTimer() - start));

如果两者除了记号外完全相同,它们应该花费完全相同的时间。但是正如你所看到的,情况并非如此。在我的机器上:

Time with dot syntax:      3937
Time with bracket syntax:  9857

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接