2016-08-25 78 views
0

在下面的代碼中,我期望生成一個二維數組,並預先填充零。我得到的問題是x[0][3] = 2似乎太快了,所以在控制檯登錄函數的時候,數組已經有了一個改變的值。我似乎無法彌補這一點,即使超時。這是怎麼回事?這個2d數組爲什麼會產生意想不到的結果?

function test(size) { 
    var row = []; 
    var return_me = []; 
    for (var i=0; i < size; i++) { row.push(0); } 
    for (var j=0; j < size; j++) { return_me.push(row.slice()); } 
    console.log("1:"); 
    console.log(return_me); 
    return return_me; 
} 

var x = null; 
console.log("0:"); 
console.log(x); 
x = test(5); 
console.log("2:"); 
console.log(x); 
x[0][3] = 2; 
console.log("3:"); 
console.log(x); 

意想不到的結果來自於「1」輸出,在那裏我得到:

0: 0 
1: 0 
2: 0 
3: 2 
4: 0 
+1

是否有一個實際的_error_參與或日誌只是看起來意外? – Xufox

+0

您發現意外的日誌結果是什麼? –

+0

對不起,這是誤導性的:沒有錯誤。我用更具體的問題更新了這個問題,以便更清楚。 –

回答

2

由於數組是一個對象,你會看到的實際(最新)值console.log()顯示對對象的引用,並且在打開它時,值已更改。

的選擇是使用console.dir()打印該對象的當前狀態(儘管console.dir()無法在Chrome工作)。

如果你想獲得鉻的真實值,打印一個值,而不是整個對象。
您可以查看this post以獲得更多解釋和更多信息。

+0

我希望這是類似的東西(不是我的功能本身)。謝謝! –

+0

是的,我認爲編碼JS的每個人遲早會在這件事上絆倒。 :d –

相關問題