我有一个如下对象:
var dataSources = [
{
Stage: [2, 3, 4],
Name: "GetAustralianStateList"
},
{
Stage: [2, 3, 4],
Name: "GetGenderList"
},
{
Stage: [2, 3, 4],
Name: "GetTitleList"
},
{
Stage: [2, 3, 4],
Name: "GetCountryList"
},
{
Stage: [2, 3, 4],
Name: "GetRegionList"
},
{
Stage: [2, 3, 4],
Name: "GetNonEnglishLanguageList"
},
{
Stage: [2, 3, 4],
Name: "GetContactRelationshipList"
},
{
Stage: [3, 4],
Name: "GetCompanyCodeList"
},
{
Stage: [3, 4],
Name: "GetBusinessContractList"
},
{
Stage: [3, 4],
Name: "GetPayrollAreaList"
},
{
Stage: [3, 4],
Name: "GetAdministrationAreaList"
},
{
Stage: [3, 4],
Name: "GetWorkContractList"
},
{
Stage: [2, 3, 4],
Name: "GetFirstLanguageList"
},
];
当我在Chrome中调用dataSources.length
时,它会返回对象中正确数量的项目。但是,Internet Explorer返回的长度比对象中的实际长度多14到1个。
有什么想法吗?
答案 0 :(得分:8)
查看最后一个对象后的,
?
IE因为它而看到了一个被忽略的元素。
答案 1 :(得分:6)
不幸的是,你发现了ECMAScript实现中极少数错误之一:IE将数组文字中的单个尾随逗号视为省略,因此它将长度增加1:
var a = [0,1,];
alert(a.length); // 3 in IE
// 2 in other browsers
a.hasOwnProperty('2'); // false in all browsers
以上显示IE将逗号视为一个省略:长度增加了一个,但索引2处没有数组成员。
答案 2 :(得分:1)
您应该删除最后一个“,
”,如下所示:
{
Stage: [2, 3, 4],
Name: "GetFirstLanguageList"
}
];
答案 3 :(得分:1)
使用'push'构建数组时也会发生这种情况。我用这样的代码点击它:
var Entries = new Array;
...some loop that adds entries...
Entries.push( createEntry( values ) );
createEntry函数会对'values'数组进行一些验证,如果验证失败,则不会返回任何值。然后将未定义的值推入Entries数组。如果这个未定义的条目是'last'值,它将在I.E.中失败。浏览器。为了解决这个问题,我使用了:
var Entries = new Array;
...loop to add entries...
var Entry = createEntry( values );
if( Entry ) Entries.push( Entry );
基本上,如果未定义,请不要将内容推送到数组中。