Javascript 覆盖一个值的无限多维数组
我正在用数组来解释,我遇到了这种奇怪的现象。我在控制台中这样做:Javascript 覆盖一个值的无限多维数组,javascript,arrays,object,multidimensional-array,Javascript,Arrays,Object,Multidimensional Array,我正在用数组来解释,我遇到了这种奇怪的现象。我在控制台中这样做: var x = ['Paul Irish', 'Alex Sexton', 'Nicholas Zakas'], y = x, z = y; y[1] = x[0]; // we're trying to switch Alex with Paul z[2] = y[0]; // we're trying to switch Nick with Paul x[2] = x; // whoops a typ
var x = ['Paul Irish', 'Alex Sexton', 'Nicholas Zakas'],
y = x,
z = y;
y[1] = x[0]; // we're trying to switch Alex with Paul
z[2] = y[0]; // we're trying to switch Nick with Paul
x[2] = x; // whoops a typo
并在每个内部键2中创建无限数组
// ["Paul Irish", "Paul Irish", Array[3]]: // infinite arrays
然后我为其中一个MD值指定了另一个名称:
x[2][2][2] = 'Jenn Schiffer';
但没想到:
x[2][2][2] // undefined
x[2][2][1] // undefined
x[2][2][0] // n
x[2][2] // n
x[2][1] // e
x[2][0] // J
x[2] // Jenn Schiffer
x[1] // Paul Irish
x[0] // Paul Irish
我无法解释这些结果(在最新的Chrome&FF上测试)。
分配的字符串如何成为分散到其他键中的数组 你什么时候做的
x[2] = x;
x
实际上已经成为
[ 'Paul Irish', 'Paul Irish', [Circular] ]
这意味着x
的第二个元素是x
仅当您执行此操作时
x[2][2][2] = 'Jenn Schiffer';
x[2]
仅指x
。因此,x[2][2]
再次仅指x
。因此,表达式,x[2][2][2]
与x[2]
相同。你可以这样理解
x[2][2][2] => (x[2])[2][2] => (x)[2][2] => (x[2])[2] => x[2]
您基本上是通过分配一个x[2][2][2]='Jenn Schiffer'的字符串来删除循环引用代码>。此时,x
[ 'Paul Irish', 'Paul Irish', 'Jenn Schiffer' ]
现在,当你
x[2][2][2]
x[2]
是'Jenn Schiffer'
,x[2][2]
是n
,'n'[2]
是未定义的