环境:Flex 3.6
看看这段代码:
var arr:Array = new Array()
var t:Object = {number:"12345", id:"Public"};
arr[t] = "Hello";
for (var z:Object in arr)
{
if (z is String)
trace("STRING");
if (z is Object)
trace("OBJECT");
trace("z.number = " + z.number);
}
输出:
STRING
OBJECT
然后在最后一次trace()
调用时崩溃并出现错误:
ReferenceError: Error #1069: Property number not found on String and there is no default value
对象是否应该保留字段的名称? 我做错了什么?
答案 0 :(得分:4)
在for(var key)
对象Array
的{{1}}循环中始终为key
。您可以使用String
,然后Dictionary
将是对象的类型,您的代码将起作用:
key
答案 1 :(得分:0)
数组的键通常是数字。 这一行:
arr[t] = "Hello";
可能没有按照您的期望进行操作,因为它将对象t转换为字符串以用作数组中的键。它被转换为字符串“[object Object]”。
此代码中存在几个问题:
for (var z:Object in arr)
{
if (z is String)
trace("STRING");
if (z is Object)
trace("OBJECT");
trace("z.number = " + z.number);
}
Z应该是String而不是Object类型,但是如果你想查看数组中的每个项目,并且你想要为每个循环而不是for循环使用a。由于数组可以包含不同的类型,因此z必须是“*”类型。
最后,正在运行z.number的跟踪,无论z是什么类型,只有当z是一个Object时才应该运行它。 (并且还假设数组中的所有对象都具有数字属性。)
arr[0] = "Hello";
arr[1] = t;
for each (var z:* in arr)
{
if (z is String)
trace("STRING");
if (z is Object) {
trace("OBJECT");
trace("z.number = " + z.number);
}
}