我有以下
var arrayT = new Array();
arrayT['one'] = arrayT['two'] = new Array();
arrayT['one']['a'] = arrayT['one']['b'] = '';
arrayT['two'] = arrayT['one'];
arrayT['two']['a'] = 'test';
console.log(arrayT);
在控制台中,我有
[one][a]='test'
[one][b]=''
[two][a]='test'
[two][b]=''
为什么?
jsFiddle
最佳答案
线
arrayT['one'] = arrayT['two'] = new Array();
创建一个共享数组对象。二维数组中的每个“内部”数组实际上只是对同一对象的引用,因此更改一个“内部”数组将必然以完全相同的方式影响另一个。
而是创建两个单独的数组:
arrayT['one'] = new Array();
arrayT['two'] = new Array();
此外,即使您实施了该更改,该行也会:
arrayT['two'] = arrayT['one'];
会产生相同的问题-
arrayT['two']
和arrayT['one']
将指向同一对象,可能会导致将来发生类似性质的问题(例如,在下一行更改arrayT['two']['a']
会更改arrayT['one']['a']
,因为它们指向相同的对象)。