IE中的Javascript .length不正确

时间:2012-03-28 01:55:04

标签: javascript internet-explorer

我有一个如下对象:

    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个。

有什么想法吗?

4 个答案:

答案 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 );

基本上,如果未定义,请不要将内容推送到数组中。