之前在写扫雷的时候,因为需要用到二维数组,出现了问题,所以记录一下。
当我们在需要使用多维数组的时候,一定要使用正确的声明,不然就会出行令人头大的问题:
// 正确的声明
var arr = []
arr[0] = []
arr[1] = []
arr[2] = []
// 或者
arr[0] = [0, 0, 0]
arr[1] = [0, 0, 0]
arr[2] = [0, 0, 0]
演示一下错误的声明:
// 错误的声明
var arr = []
var arr2 = [0, 0, 0]
arr[0] = arr2
arr[1] = arr2
arr[2] = arr2
// 这个时候我们改变 arr[0][0]
arr[0][0] = 1
// 然后我们 log 数组试一下
console.log(arr)
/*
[1, 0, 0]
[1, 0, 0]
[1, 0, 0]
发现了没,arr[0][0]、arr[1][0]、arr[2][0] 都一起发生了变化
只是修改了 arr[0][0],但是其他的数组居然也发生了变化
*/
这样的声明会发生错误,这里是挺鬼畜的,因为按照我个人的理解,arr[i] 应该是复制了 arr2 的内容,但是从这个结果来看,很显然不是这个样子的。
所以在使用多维数组的时候一定不要犯这样的低级错误(可能只有我这么水的才会犯吧,emmm)。