我正在尝试使用数组进行解释,但我遇到了这种奇怪的现象。我在控制台中这样做了:
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上测试过)。 分配的字符串如何成为分散到其他键中的数组?
答案 0 :(得分:2)
当你做了
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]
为undefined
。