谁能告诉我为什么这不起作用?从我可以告诉购买文档和我能找到的任何示例,它应该,但我一直得到下面的错误
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
谢谢!
答案 0 :(得分:4)
当您说colorArray[1][0]
时,JavaScript会访问colorArray[1]
,因为它尚未定义,所以评估为undefined
。所以,你正试图做undefined[0]
。这就是它失败的原因。
要解决此问题,
你必须像这样初始化元素1
colorArray[1] = [];
在对该元素进行任何更改之前
colorArray[1][0] = '2F76EE';
colorArray[1][1] = '2F76EE';
...
由于您正在进行静态初始化,您甚至可以执行
var colorArray = [];
colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
colorArray.push([ '2F76EE', '2F76EE', '5fff74', '5e6cff', 'a6ff1d' ]);
否则,您可以直接初始化,就像这样
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);
时,您将两次添加相同的引用。因此,两个元素都指向同一个对象。因此,改变一个会影响另一个。
答案 1 :(得分:1)
你需要
colorArray[1] = [];
答案 2 :(得分:0)
比你拥有的更简单,也避免了你的问题:
var colorArray =
[['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d'],
['2F76EE','2F76EE','5fff74','5e6cff','a6ff1d']];
(请参阅其他答案,了解您所撰写的内容是否已损坏。)