即在访问对象时给出“...是null还是非对象”错误?

时间:2010-12-17 22:56:15

标签: javascript internet-explorer

我有一个JavaScript对象文字:

var things = {
    "a": {
        7: {
            "b": "asdf",
            "z": {
                1: {
                    "name": "Ship0",
                    "loa": 100,
                    "draft": 5000
                },
                2: {
                    "name": "Ship1",
                    "loa": 100,
                    "draft": 5000
                }
            }
        },
        8: {
            "b": "fdsa",
            "z": {
                5: {
                    "name": "Ship0",
                    "loa": 100,
                    "draft": 5000
                },
                6: {
                    "name": "Ship1",
                    "loa": 100,
                    "draft": 5000
                }
            }
        }
    }
};

...稍后在函数中,我这样做:

function p_get_index_of_existing_ship(customer_id, ship_id)
{
    return someotherfunctionof(ship_id, things["a"][customer_id]["z"]);
}

它在firefox中运行良好,但在IE(7,8)中,我得到“错误:'things.a [...]。z'为null或不是对象。

这不是在javascript中访问这种关联数组(对象)的正确方法吗?

2 个答案:

答案 0 :(得分:2)

对象文字的键必须是有效的标识符名称。您的密钥是78,它们不是有效名称(因为第一个(也是唯一的)字符是数字)。我建议改用字符串:

"7": { ... }

编辑:我查看了规范......似乎数字文字是键的有效名称......但它仍然可能是IE不喜欢它们。尝试字符串,你会知道。

修改:试试这个:

function p_get_index_of_existing_ship(customer_id, ship_id)
{
    // return someotherfunctionof(ship_id, things["a"][customer_id]["z"]);
    things["a"][customer_id]["z"];
}

错误是否仍显示在IE中?

答案 1 :(得分:0)

问题是...[customer_id]评估为未定义。

现在,找出原因。