Javascript ie给出了“;。。。是否为空或不是对象;访问对象时出错?

Javascript ie给出了“;。。。是否为空或不是对象;访问对象时出错?,javascript,internet-explorer,Javascript,Internet Explorer,我有一个JavaScript对象文本: var things = { "a": { 7: { "b": "asdf", "z": { 1: { "name": "Ship0", "loa": 100, "draft": 5000 },

我有一个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)中,我得到“error:'things.a[…].z”为null或不是对象


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

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

"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中?

问题是,
.[customer\u id]
计算结果为未定义


现在,找出原因。

客户id的值是什么??我不是javascirpt专家,但你的语法不应该是东西。a[customer\u id].z?@Babak Naffas:
x[“a”]
对于所有的a都是相同的
x.a
,因此a是有效的标识符。前一种形式可以接受无效的标识符。
x[“Hello world”]
@Colin因为缺少故障排除——我只是简单地回答了下面的问题。有两种选择。我建议安装IE脚本调试器和/或使用IE8开发工具更好地诊断您的问题。每天学习一些新的东西,感谢@pst@Šime Vidas,它假设其他浏览器通过e相同的
customer\u id值
。另一种选择是,所讨论的
事物
与预期不符。在这两种情况下,它都不会改变上述语句(我从查看错误消息中得出,即以特定格式列出)是的,两个浏览器的customer_id值相同。我想答案是IE不喜欢键的文字数字…@Colin好吧,你使用IE调试器(IE8“开发工具”)检查了
things
的值,看到了什么?你在寻找解析错误(或错误抑制器)看到了什么?@Colin IE似乎很喜欢发布的代码。@Colin:不,这不是答案。所有键都是对象文本上的字符串-即使您将其定义为数字,它也会强制转换为字符串。访问属性时也是如此-如果您使用数字或任何其他值,则该值会强制转换为属性i之前的字符串IE在这方面的表现与其他浏览器没有什么不同。我认为pst更可能是正确的,你的问题与你问题中的代码片段无关。因此,我想,IE不接受数字文本作为键。所以这是IE的一个功能…@Colin,当你使用stri时,它在IE中工作吗ngs替代?它仍然是无效的JSON,键名上没有引号。如果IE拒绝语法,我希望会出现解析错误。@pst JSON合规性将是另一个问题。根据规范(ES5),属性名(键)可能是数字文本。@pst这是假设OP使用的是
JSON.parse
而不是
eval
,或者他没有混淆对象文本和JSON字符串之间的区别。