首页 > 解决方案 > Javascript 控制台在折叠和展开时显示不同的值,并且与引用时不同

问题描述

我在 d3.js 中工作,并使用我需要的值创建了这个对象。然后当我去绘制 d3 线时,当我最初启动值时,这些值已经神秘地变为 0 值。

这太奇怪了,因为我可以这样做console.log(d),并且取决于对象在控制台中是折叠还是展开,它会显示不同的d.my_count.

请参阅此怪异行为的屏幕截图: 在此处输入图像描述

以下是我如何递增(更改)这些值:

dataset.then(function(data) {
    //loop through all the data
    data.map(function (d){
        //round the score
        var rating = Math.round(d.average_rating)
        //bump up max rating if needed
        if(rating > maxRating){maxRating = rating};

        if(years.includes(d.year)){
            tmpIndex = indexByYear(d.year)
            ratingCountByYear[tmpIndex][rating]['my_count'] += 1;
        }
    })
})

看到上面写着的那行:ratingCountByYear[tmpIndex][rating]['my_count'] += 1;?那是显然对我的ratingCountByYear对象进行更改的行。但它只会在控制台中显示为扩展时的更改值。

这是 Firefox 中的控制台。Chrome表现出类似的行为,除了展开和折叠的视图显示我想要的值,而尝试访问这些值总是给我实例化的值(我知道是因为我试图改变实例化,只有实例化的值来了当我尝试访问它时)

世界上到底发生了什么?我假设对象如何在引擎盖下保存在内存中存在某种问题?!?!?

标签: javascript

解决方案


我想到了。我试图在数据处理完成之前画线,但它没有更新。我将所有绘图放入一个函数中,一旦完成数据处理,我就会调用该函数,并且成功了。

对于控制台,最初打印的行(未展开)显示的是初始化值,而展开的是更新的值。


推荐阅读