在下面的代码中,我希望生成一个二维数组,预先填充零。我得到的问题是x[0][3] = 2
似乎发生得太快,所以在控制台登录函数时,数组已经有了更改的值。即使有超时,我也无法解决这个问题。发生了什么事?
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);
意外结果出现在&#34; 1:&#34;在输出中,我得到:
0: 0
1: 0
2: 0
3: 2
4: 0
答案 0 :(得分:2)
由于数组是一个对象,您将看到实际(最新)的值,因为 console.log()
显示对象的引用,当您打开它时,该值已经改变。
选项是使用console.dir()
打印对象的当前状态(尽管console.dir()
不适用于chrome)。
如果要获取chrome中的实际值,请打印一个值,而不是整个对象。
您可以查看this post以获取扩展说明和更多信息。