我在论坛中听到过不同的内容,但无法就obj [name]和obj.name之间的区别找到具体的答案。编译器是否以不同方式对待它们?
答案 0 :(得分:5)
取决于obj是否为动态类。 obj [name]是属性的运行时检查,如果obj.name不存在则会产生编译时错误。
答案 1 :(得分:4)
实际上,它是obj [表达]与obj.identifier
前者总是导致动态运行时查找,而后者可以并且将在编译时检查。因此,如果obj被密封(即不是动态的)并且没有与标识符匹配的属性,则它可以产生编译时错误。此外,如果属性不是动态的(即动态对象的运行时添加属性),但在对象类中定义,则此信息用于执行更快的查找。
总结:与obj [表达式]相比,obj.identifier 类型安全且显着更快
答案 2 :(得分:2)
var foobar:String = "id";
var obj:Object = new Object{ id:"the value of variable" };
trace( obj.id ); // the value of variable
trace( obj[ foobar ] ); // value of variable
如果它是一个变量并且你没有名字
,你会使用[]方法