【问题标题】:Infinite Multidimensional Array where one value is overwritten一个值被覆盖的无限多维数组
【发布时间】:2015-05-27 07:15:24
【问题描述】:

我正在尝试使用数组进行解释,但我遇到了这种奇怪现象。我在控制台中这样做了:

    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 上测试)。 分配的字符串如何成为分散到其他键中的数组?

【问题讨论】:

    标签: javascript arrays object multidimensional-array


    【解决方案1】:

    什么时候做的

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      • 1970-01-01
      相关资源
      最近更新 更多