所以我无法弄清楚如何比较两个数组的差异,并能够找到彼此不存在的元素。大多数示例都讨论了对象查找,以便与“for each in”循环一起使用。这很有道理,但我不知道这里发生了什么:
var item:Sprite;
object_lookup[item] = true;
我很困惑,因为我从未见过[]内部的整数,例如数组。
答案 0 :(得分:1)
Object
是动态的,这意味着您可以在运行时为其分配属性:
var o:Object = {};
o.sayHi = "Hi, it's me";
trace(o.sayHi); //traces: Hi, it's me
o.sayHiWithFunction = function () { return "Hi with function" };
trace(o.sayHiWithFunction()); //traces: Hi with function
如果要分配的属性不是有效标识符,则必须使用[]并将其作为字符串放置,例如:
var o:Object = {};
o.this = "Yes, it is this!"; // Error, this is a keyword! Won't compile
o["this"] = "And the correct this!"; //And this one works!
o["more words"] = "More words"; //Works too
您的代码令人困惑。如果object_lookup
是Object
实例,则您在其上创建了一个名为null
的属性,但您将此属性设置为true。这意味着它与您在其上方声明的Sprite
项完全无关。当然,这是null,因为你没有为它分配一个sprite对象,这就是为什么属性名被评估为null。这里不要混淆:属性名称“null”只是一个字符串,它与类型null
无关。
现在,for in
循环遍历Object的所有属性名称,如果您知道属性名称,您实际上也可以查找值。看起来像这样:
var o:Object = {a:"A", b:"B", c:"C"}; // This is equivalent to o.a = "A", o.b = "B", o.c = "C"... which is aquivalent to o["a"] = "A" ;)
for(var i in o) {
trace(i, o[i]) //traces: c C, a A, b B
}
for each in
略有不同,如果您追踪i
,您将看到值,而不是for in
循环的属性名称。
否则,请在评论中按照Vesper的建议,阅读Dictionary
。