我正在尝试定义一个对象数组,我可以根据数组的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中定义这种方式,就像我期望数组一样?
谢谢!
答案 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
})();