js二维数组新认识

js的二维数组

以前轻视了js二维数组的问题,直到写笔试题的时候,才发现踩了不应踩的坑,因此今天作一下总结,以防再犯;数组

原由

原由是这样的,我想建立一个初值都为1的bash

4*4

二维数组,因而乎很直接进行了以下操做:ui

var d_arr = [];
for(let i = 0;i < 4;i++){
  for(let j = 0;j < 4;j++){
    d_arr[i][j] = 1;
  }
}
console.log(d_arr);复制代码

结果却一直报错spa

TypeError: Cannot set property '0' of undefinedcode

通过

思索了一下子,我又修改成:对象

var d_arr = [];
var temp_arr = [];
    for(let j = 0;j<4;j++){
        temp_arr[j] = 0;
    }
    for(let i = 0;i<4;i++){
        d_arr[i] = temp_arr;
    }
    console.log(d_arr);复制代码

不知道你们有没有看出来,我犯了一个很愚蠢的错误。。虽然console.log能够正常打印二维数组了,可是,每当我修改这个二维数组的值,好比我想修改[0][1]值为0,当我进行d_arr[0][1]=0;后,结果是:[ [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ] ] 可见,若是当作这是一个4*4的矩阵,第二列全被改为了1,其实这是由于,数组是引用类型的,我赋值的时候,是把同一个数组赋给了d_arr的每个元素。。d_arr的每一维都指向的是同一个对象呢。。console

结果

虽然上面的修改也能够获得正确结果,但老是看着不正规,上网搜索,发现真正的操做方法是我一直忽略的new Array()!!class

var d_arr = new Array();
for(let i = 0;i<4;i++){
  d_arr[i] = new Array();
  for(let j = 0;j<4;j++){
    d_arr[i][j] = 0;
  }
}
console.log(d_arr);复制代码

这样就是一个想要获得的d_arr啦!搜索

ps:new Array还有一个用处,就是指定数组的长度:var arr = new Array(8);引用

相关文章
相关标签/搜索