【问题标题】:Javascript in Chrome not returning same array length as Internet ExplorerChrome 中的 Javascript 不返回与 Internet Explorer 相同的数组长度
【发布时间】:2016-08-05 21:16:20
【问题描述】:

我正在尝试定义一个对象数组,稍后我可以根据数组的长度属性循环遍历这些对象。在 Internet Explorer 中,它可以正常工作,但在 Chrome 中却不行。下面是定义对象数组的 sn-p 代码:

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 中定义它,就像我期望一个数组一样?

谢谢!

【问题讨论】:

  • Chrome also returns 2。一定有其他事情发生。
  • 奇怪,我可以用相同的代码在 Chrome 中复制这个问题,在 chrome 中显示 31,在 IE 中显示 2 - codepen.io/nagasai/pen/yJRRgd
  • @NagaSaiA 这是因为 jsfiddle 默认将代码包装在 window.onload 内,但 codepen 只是将其放在正文的末尾,而不是任何函数内。在 codepen 中,该变量在 window 对象上的含义,从那里您可以查看 cdrini 的答案以了解接下来会发生什么 =P

标签: javascript arrays google-chrome internet-explorer


【解决方案1】:

很奇怪!显然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
})();

【讨论】:

  • According to the spec,看起来chrome在右边:“由于历史原因,Window对象上的状态属性必须在获取时返回最后一个字符串它设置为“
  • 非常感谢!我在转圈试图找出问题所在..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 2018-09-09
  • 2016-07-13
  • 2010-10-25
  • 2014-08-22
  • 2017-12-18
相关资源
最近更新 更多