Javascript二维数组

Javascript二维数组,javascript,arrays,Javascript,Arrays,有人能告诉我为什么这不起作用吗?从我能告诉你的购买文档和我能找到的任何例子来看,它应该是,但我一直得到下面的错误 var colorArray = []; colorArray[0] = []; colorArray[0][0] = '2F76EE'; colorArray[0][1] = '2F76EE'; colorArray[0][2] = '5fff74'; colorArray[0][3] = '5e6cff'; colorArray[0

有人能告诉我为什么这不起作用吗?从我能告诉你的购买文档和我能找到的任何例子来看,它应该是,但我一直得到下面的错误

var colorArray = [];
    colorArray[0] = [];
    colorArray[0][0] = '2F76EE';
    colorArray[0][1] = '2F76EE';
    colorArray[0][2] = '5fff74';
    colorArray[0][3] = '5e6cff';
    colorArray[0][4] = 'a6ff1d';
    colorArray[1][0] = '2F76EE'; //error is happening here
    colorArray[1][1] = '2F76EE';
    colorArray[1][2] = '5fff74';
    colorArray[1][3] = '5e6cff';
    colorArray[1][4] = 'a6ff1d';
我运行它时出错了

Uncaught TypeError: Cannot set property '0' of undefined

谢谢

当您说
colorArray[1][0]
时,JavaScript访问
colorArray[1]
,由于它尚未定义,因此计算结果为
未定义。因此,您正在尝试执行
未定义的[0]
。这就是它失败的原因

为了解决这个问题

  • 必须像这样初始化元素1

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
    在对该元素进行任何更改之前

    colorArray[1][0] = '2F76EE';
    colorArray[1][1] = '2F76EE';
    ...
    
  • 因为您正在进行静态初始化,所以您甚至可以

    var colorArray = [];
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    
  • 否则,您可以直接初始化,如下所示

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
  • 你也可以这样做

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
    注意:你可能会想,为什么我不能这么做

    colorArray.push(element1, element1);
    
    因为两个数组是相同的。当然,它会起作用的。但它有一个问题如果对其中一个数组进行变异,它也会影响其他数组。比如说,

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element1);
    colorArray[0].push("abcdef");
    console.log(colorArray);
    // [ [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ],
    //   [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ] ]
    
    你可能没有料到这一点。但在JavaScript中,所有变量名都只是对对象的引用。因此,当您执行
    colorArray.push(element1,element1)时添加同一引用两次。因此,两个元素都指向同一个对象。因此,变异一个会影响另一个


  • 当你说
    colorArray[1][0]
    时,JavaScript访问
    colorArray[1]
    ,由于它还没有定义,所以计算结果为
    未定义。因此,您正在尝试执行
    未定义的[0]
    。这就是它失败的原因

    为了解决这个问题

  • 必须像这样初始化元素1

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
    在对该元素进行任何更改之前

    colorArray[1][0] = '2F76EE';
    colorArray[1][1] = '2F76EE';
    ...
    
  • 因为您正在进行静态初始化,所以您甚至可以

    var colorArray = [];
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    
  • 否则,您可以直接初始化,如下所示

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
  • 你也可以这样做

    colorArray[1] = [];
    
    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var element2 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element2);
    
    注意:你可能会想,为什么我不能这么做

    colorArray.push(element1, element1);
    
    因为两个数组是相同的。当然,它会起作用的。但它有一个问题如果对其中一个数组进行变异,它也会影响其他数组。比如说,

    var element1 = [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ];
    var colorArray = [];
    colorArray.push(element1, element1);
    colorArray[0].push("abcdef");
    console.log(colorArray);
    // [ [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ],
    //   [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d', 'abcdef' ] ]
    
    你可能没有料到这一点。但在JavaScript中,所有变量名都只是对对象的引用。因此,当您执行
    colorArray.push(element1,element1)时添加同一引用两次。因此,两个元素都指向同一个对象。因此,变异一个会影响另一个

  • 你需要有

    colorArray[1]=[]

    您需要


    colorArray[1]=[]

    比您拥有的代码简单得多,同时也避免了您的问题:

    var colorArray =
      [['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d'],
       ['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d']];
    

    (请参阅其他答案,了解您所写内容被破坏的原因。)

    比您所拥有的内容简单得多,同时也避免了您的问题:

    var colorArray =
      [['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d'],
       ['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d']];
    

    (请参阅其他答案,了解您编写的内容被破坏的原因。)

    请参阅JavaScript没有二维数组。它有数组,您可以嵌套它们。但是仅仅因为在主数组的第一个插槽中放置了一个子数组,并不意味着在第二个插槽中会自动获得一个子数组。它有数组,您可以嵌套它们。但是,仅仅因为您在主阵列的第一个插槽中放置了一个子阵列,并不意味着您会在第二个插槽中自动获得一个子阵列。答案很好!非常感谢。回答得好!非常感谢。