首页 > 开发 > JS > 正文

同样是数组,为什么chrome控制台打印的结果不一样?

2017-09-05 05:51:32  来源:网友分享

如图所示,

两个一样的数组,为什么在chrome上,一个显示{},一个不显示,
该问题导致我怀疑这两组数据到底是不是一样的。。。

生成数据1的代码如下

//数组-经纬度var geoCoordMap = {    "齐齐哈尔":[123.97,47.33],    "盐城":[120.13,33.38],    "赤峰":[118.87,42.28],    "青岛":[120.33,36.07]}//处理函数var convertData = function (data) {            var res = [];            //遍历数组            for (var i = 0; i < data.length; i++) {                //按数组名查询数组-经纬度                var geoCoord = geoCoordMap[data[i].name];                //如果匹配                if (geoCoord) {                    //在新数组中插入对象                    res.push({                        name: data[i].name,//数组的name                        value: geoCoord.concat(data[i].value)//连接                    });                }            }            return res;    };

生成数据2的代码如下

var token='XIxs9YC0wXa86WfWQGBM89qyohwGoXkx';var url="http://api.map.baidu.com/geocoder/v2/?output=json&ak="+token+'&address=';//该数组为两个方法共同使用,以作测试var _test = [    {name: "齐齐哈尔", value: 9},    {name: "盐城", value: 12},    {name: "赤峰", value: 12},    {name: "青岛", value: 12}];var charData=[];for(var k = 0;k<_test.length;k++){    var m = _test[k].name;    var j = _test[k].value;    (function(m,j) {        $.getJSON(url+m+'&callback=?',function(res){            if(res.status===0){                loc=res.result.location;                charData.push({                    name:m,                    value: [parseFloat((loc.lng).toFixed(2)),parseFloat((loc.lat).toFixed(2)),j]                });            }            else{                alert('百度没有找到地址信息');            }        })    })(m,j)}

两组数据都是通过push空数组生成的,都在value上放置了一个含有三项数值的新数组,但是为什么打印结果不一样呢?
难道他们真的不一样?

解决方案

看不到代码里console.log,不知道你的打印时机,打印时机的不同,结果是有点怪异的,一般来说数组的话,你在打印它的时候,它的个数会显示和内容会简单的显示在第一行,但是点开箭头,才是数组的实时数据

我给你看个截图吧

第一次打印的时候a才两个元素,但是后面第二次打印之前我给a加了个元素,结果就不一样了。

点开的是实时数据,第一行显示的是当时的数据。

补充一点,那就是箭头实时数据点开的那一刻也是有讲究的,如果在a还没增加元素前提前点开了箭头,展示的数据,就固定在了当时点开时数组的实时数据……不好表达,看动图吧。第一个console跟后面几个的区别