我有以下

    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'],因为它们指向相同的对象)。

10-06 03:55