一个关于js数组赋值的问题

let test=new Array(2).fill(new Array(2).fill(0));
test[0][0]=1;
console.log(test);

这样一段代码,我觉得打印的结果应该是

[
    [1,0],
    [0,0]
]

可结果却是
clipboard.png

阅读 2.7k
3 个回答
let test=new Array(2).fill(new Array(2).fill(0));
// 等于
const array = new Array(2).fill(0)
let test=new Array(2).fill(array);

而 array 是一个引用对象,所以test[0] === test[1],所以出现这样的打印结果

(test[0] === test[1]) //true
因为指向同一个内存地址,

这样写你就明白了

let d=new Array(2).fill(0)
let test=new Array(2).fill(d)

在js中Array是引用类型,所以

let a = [0, 0];
let b = a;
a[0] = 1;
console.log(b); // => [1, 0]

外层Array填充的两个元素是同一个数组的引用,所以,你懂的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题