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