2015-01-15 52 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