2015-01-15 53 views
2

所以我做在JavaScript中的柱状图,当我初始化它,我有它初始化每个容器的属性“内容”为0:的JavaScript坚持认为0是NaN

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)直方图...

+2

这可能是你如何访问第一次日志中的“直方图”。你可以添加代码吗? – Locke 2015-01-15 16:25:22

+1

您在此处发布的代码不会这样做,所以您必须对其他代码中的值做其他操作。 [这是一个jsfiddle。](http://jsfiddle.net/rmw4fhkw/) – Pointy 2015-01-15 16:27:37

+0

请记住,至少在某些浏览器中,控制台为您记录的对象提供“实时”视图。在记录对象之后,你应该将'contents'设置为'NaN' *,然后展开记录的对象,控制台将更新它的视图以显示最新的值。当你记录'直方图[0]'时不会发生这种情况,因为这里没有什么可以扩展的。 – 2015-01-15 16:28:19

回答

1

为了详细说明上述注释,某些浏览器上的控制台为您记录的对象提供了一个“实时”视图。例如,当组合对象(或数组)展开时,Firebug将显示最新的数据。 (此外,似乎Chrome updates the logged information even if the user does not expand anything。)

因此,至少与萤火虫,测井非膨胀的信息(如histogram[0])将导致“静态”的数据不会改变,而测井膨胀的信息(如histogram )将产生“动态”数据,这些数据将反映扩展时对象的状态,而不是日志记录时的状态。

在您的具体情况下,您的代码中的某些内容会在您记录日志后破坏contents的值,但由于您正在扩展记录的对象,因此您将看到破坏值而不是原始值。

从您的意见,它看起来像一个部门参与。它可能是一个零除,因为contents最初是00/0产生NaN