如题 在一个二维数组里执行一段代码
const a = new Array(3).fill(new Array(3).fill(false))
得到的是一个二位list数组, 再执行命令
a[0][0] = true
在此跟预想的结果完全不一致 理论上应该只有第一位值会变成true 因为a [0][0]锁定的是第一行第一列的值变为true
那么为什么结果第一列的值都变成true了呢
解析:
其实关键点在创立二维数组的方法上 new Array(3).fill(false)
new Array(3).fill(false)
这个方法本身就是填充一个数组的值都为false
而new Array(3).fill的方法是先建立一个数组,然后拷贝拷贝变成一个矩阵数组
那结果就出来了, 后面两行数组是拷贝第一行的值,所以当第一行的值改变时,后面两行数组第一位的值也是指向第一行数组的内存的。 相当于浅拷贝
如果不用fill 用forEach来执行结果将完全不一样 ,有兴趣的可以自己尝试。