Javascript 2维数组

时间:2014-03-19 03:36:04

标签: javascript arrays

谁能告诉我为什么这不起作用?从我可以告诉购买文档和我能找到的任何示例,它应该,但我一直得到下面的错误

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

谢谢!

3 个答案:

答案 0 :(得分:4)

当您说colorArray[1][0]时,JavaScript会访问colorArray[1],因为它尚未定义,所以评估为undefined。所以,你正试图做undefined[0]。这就是它失败的原因。

要解决此问题,

  1. 你必须像这样初始化元素1

    colorArray[1] = [];
    

    在对该元素进行任何更改之前

    colorArray[1][0] = '2F76EE';
    colorArray[1][1] = '2F76EE';
    ...
    
  2. 由于您正在进行静态初始化,您甚至可以执行

    var colorArray = [];
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
    
  3. 否则,您可以直接初始化,就像这样

    var colorArray = [[ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ],
                      [ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]];
    
  4. 您也可以这样做

    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);时,您将两次添加相同的引用。因此,两个元素都指向同一个对象。因此,改变一个会影响另一个。

答案 1 :(得分:1)

你需要

colorArray[1] = [];

答案 2 :(得分:0)

比你拥有的更简单,也避免了你的问题:

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

(请参阅其他答案,了解您所撰写的内容是否已损坏。)