1

环境: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

对象不应该保留字段的名称吗?我做错了什么?

4

2 回答 2

4

在对象的for(var key)循环中总是. 您可以使用then将是 Object 的类型,并且您的代码将起作用:ArraykeyStringDictionarykey

 var arr:Dictionary= new Dictionary()
于 2013-01-17T12:51:36.783 回答
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 each 循环而不是 for 循环。由于数组可以包含不同的类型,z 需要是“*”类型。

最后,无论 z 是什么类型,z.number 的跟踪都在运行,它应该只在 z 是一个对象时运行。(并且还假设数组中的所有对象都具有 number 属性。)

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);
     }
}
于 2013-01-17T21:45:14.973 回答