所以我在JavaScript中制作直方图,当我初始化它时,我有一个属性"内容"每个bin初始化为0:
for (var rBin = 0; rBin < 255; rBin += 16) {
for (var gBin = 0; gBin < 255; gBin += 16) {
for (var bBin = 0; bBin < 255; bBin += 16) {
histogram[j] = {r:rBin, g:gBin, b:bBin, contents:0, width:16};
j += 1;
}
}
}
但在此之后,如果我记录histogram
,我会遇到JavaScript记录contents
的问题,而只会记录为NaN而不是0:
0: Object
b: 0
contents: NaN
g: 0
r: 0
width: 16
...
它更奇怪了。如果我只记录histogram[0]
,那么它可以正常工作并给我:
Object {r: 0, g: 0, b: 0, contents: 0, width: 16}
我做错了什么?
编辑: 记录是通过以下行完成的:
console.log(histogram);
console.log(histogram[0]);
EDIT2:
在调试器中暂停此操作会显示直方图正确存储在行console.log(histogram[0])
上,但不会存储在console.log(histogram)
...
答案 0 :(得分:1)
为了详细说明上述评论,某些浏览器上的控制台提供了一个&#34; live&#34;您记录的对象的视图。例如,Firebug将在展开复合对象(或数组)时显示最新数据。 (此外,它似乎是Chrome updates the logged information even if the user does not expand anything。)
因此,至少使用Firebug,记录不可扩展的信息(例如histogram[0]
)将导致&#34;静态&#34;记录可扩展信息(例如histogram
)时不会更改的数据将导致&#34;动态&#34;数据将反映在扩展时的对象状态,而不是在记录时。
在您的特定情况下,您的代码中的某些内容会在您记录之后隐藏contents
的值,但由于您正在扩展已记录的对象,因此您将看到修改后的值而不是原始值。
从您的评论中,看起来涉及到一个部门。它可能是零除以,因为contents
最初为0
而0/0
产生NaN
。