2016-08-25 155 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 –

相关问题