Chrome中的Javascript不会返回与Internet Explorer相同的数组长度

时间:2016-08-05 21:16:20

标签: javascript arrays google-chrome internet-explorer

我正在尝试定义一个对象数组,我可以根据数组的length属性稍后循环。在Internet Explorer中,它可以像我预期的那样工作,但不能在Chrome中运行。下面是一段定义对象数组的代码:

var status =
[
    {
        name: 'Open',
        target:
        [
            {
                systemgenerated: 'false',
                internalonly: 'true',
                name: 'Closed'
            },
            {
                systemgenerated: 'true',
                internalonly: 'true',
                name: 'Done'
            }
        ]
    },
    {
        name: 'Pending',
        target:
        [
            {
                systemgenerated: 'false',
                internalonly: 'true',
                name: 'Closed'
            },
            {
                systemgenerated: 'false',
                internalonly: 'true',
                name: 'Open'
            }
        ]
    }
];

在Internet Explorer中, status.length 返回2.在Chrome中,它返回31.根据我在Stack上看到的示例,我尝试了几种不同的方法来定义对象让它像Chrome中的数组一样工作,但没有取得任何进展。有没有一种方法可以在Chrome中定义这种方式,就像我期望数组一样?

谢谢!

1 个答案:

答案 0 :(得分:2)

很奇怪!显然status是HTML5中的保留字,用于更改状态栏的文本(因此它必须是字符串)。

var status = [];如果不在函数中,则会覆盖window.status。在这种情况下,chrome会将其转换为字符串,这就是您收到错误的原因。

更改变量名称,或将函数中的所有内容包装起来以创建隔离范围。



var status = [ {}, {} ];
console.log(status);        // "[object Object],[object Object]" in Chrome
console.log(status.length); // 31 in Chrome






(function() {
    var status = [ {}, {} ];
    console.log(status);        // the array
    console.log(status.length); // 2
})();