首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无限多维数组,其中一个值被覆盖

无限多维数组,其中一个值被覆盖
EN

Stack Overflow用户
提问于 2015-03-24 04:00:09
回答 1查看 145关注 0票数 2

我正在用数组来做解释,我偶然发现了这个奇怪的地方。我是在控制台上做的:

代码语言:javascript
复制
    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中创建无限数组。

代码语言:javascript
复制
// ["Paul Irish", "Paul Irish", Array[3]]: // infinite arrays

然后,我为其中一个MD值分配了另一个名称:

代码语言:javascript
复制
x[2][2][2] = 'Jenn Schiffer';

但没想到:

代码语言:javascript
复制
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上测试)。分配的字符串是如何变成分散到其他键中的数组的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-24 04:06:00

当你做的时候

代码语言:javascript
复制
x[2] = x;

x实际上已经变成,

代码语言:javascript
复制
[ 'Paul Irish', 'Paul Irish', [Circular] ]

这意味着x的第二个元素仅为x,然后才是

代码语言:javascript
复制
x[2][2][2] = 'Jenn Schiffer';

x[2]仅指x。因此,x[2][2]再次仅引用x。所以,表达式x[2][2][2]x[2]是一样的。你可以这样理解

代码语言:javascript
复制
x[2][2][2] => (x[2])[2][2] => (x)[2][2] => (x[2])[2] => x[2]

您基本上是通过使用x[2][2][2] = 'Jenn Schiffer';分配一个字符串来删除循环引用。此时,x

代码语言:javascript
复制
[ 'Paul Irish', 'Paul Irish', 'Jenn Schiffer' ]

现在,当你做了

代码语言:javascript
复制
x[2][2][2]

x[2]'Jenn Schiffer'x[2][2]n'n'[2]undefined

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29224807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档