JavaScript坚持认为0是NaN

时间:2015-01-15 16:22:30

标签: javascript nan

所以我在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) ...

1 个答案:

答案 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最初为00/0产生NaN