首页 >社区问答列表 >javascript - 声明数组添加值会生成类型为undefine的值

javascript - 声明数组添加值会生成类型为undefine的值

JS:用对象可以取得成功的值,用数组,就会出现有类型为undefined的值

var bodydata = $("body").data(); 
// console.log(bodydata);
bodyDatas = {};/*使用了个全局变量bodyDatas*/
_.forIn(bodydata,function(value,key){
    if(typeof value == "string"){
        value = parseLodash(n);
    }
    if(value[0] == "200"){
        var keyarray = key.split('_');
        var key0 = keyarray[0];
        var key1 = keyarray[1];
        var key2 = keyarray[2];
        _.forIn(_.keys(value[2]), function(v,k) {
            if (!bodyDatas[key0]) {
                bodyDatas[key0] = {};
            }
            if (!bodyDatas[key0][key1]) {
                bodyDatas[key0][key1] = {};
            }   
            if (!bodyDatas[key0][key1][key2]) {
                bodyDatas[key0][key1][key2] = {};
            }
            if (!bodyDatas[key0][key1][key2][v]) {
                bodyDatas[key0][key1][key2][v] = value[2][v];
            }
        });        
    }else{
        console.log("取到数据头部:"+n[0]); 
    }
})

以上可以获取到正确的结果。

var bodydata = $("body").data(); 
bodyDatas = new Array();/*使用了个全局变量bodyDatas*/

_.forIn(bodydata,function(value,key){
    if(typeof value == "string"){
        value = parseLodash(n);
    }
    if(value[0] == "200"){
        var keyarray = key.split('_');
        var key0 = keyarray[0];
        var key1 = keyarray[1];
        var key2 = keyarray[2];
        _.forIn(_.keys(value[2]), function(v,k) {
            if (!bodyDatas[key0]) {
                bodyDatas[key0] = [];
            }
            if (!bodyDatas[key0][key1]) {
                bodyDatas[key0][key1] = [];
            }
        });        
    }else{
        console.log("取到数据头部:"+n[0]); 
    }
})              
console.log(bodyDatas["mx"]);

上面这段代码是用的数组,会有默认类型为undefine的值
虽然我用对象换数组的方式解决了这个问题,但是心里始终存在疑问:为什么使用数组时,会添加了类型为undefine的值,这个值又不存在。我这个循环确实只执行了一次,那么可能是我的数组声明方式有问题,里面有个默认的值?应该如何声明?