Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中,如果:x=[];x、 推(x);?_Javascript_Arrays_Recursion - Fatal编程技术网

在javascript中,如果:x=[];x、 推(x);?

在javascript中,如果:x=[];x、 推(x);?,javascript,arrays,recursion,Javascript,Arrays,Recursion,x现在似乎是一个无限深的俄罗斯玩偶式元数组 如果选中x[0][0][0]。。。。添加的[0]索引越多,它仍然返回一个单项数组 但是否有一个有限的深度截止?或者,检查时是否按程序生成新级别?这是我能想到的仅有的两种可能性 var x = []; x.push(x); x现在似乎是一个无限深的俄罗斯玩偶类型的元数组 不是真的x是一个数组。数组中的第一个元素指向与x本身相同的内存位置。不多不少 但是是的,你能做到 var x = []; x.push(x); 您可以随意多次访问,因为您只是一次

x
现在似乎是一个无限深的俄罗斯玩偶式元数组

如果选中
x[0][0][0]
。。。。添加的
[0]
索引越多,它仍然返回一个单项数组

但是否有一个有限的深度截止?或者,检查时是否按程序生成新级别?这是我能想到的仅有的两种可能性

var x = []; 
x.push(x);
x现在似乎是一个无限深的俄罗斯玩偶类型的元数组

不是真的
x
是一个数组。数组中的第一个元素指向与
x
本身相同的内存位置。不多不少

但是是的,你能做到

var x = []; 
x.push(x);

您可以随意多次访问,因为您只是一次又一次地引用同一个内存位置

在任何级别获得x时,都不会生成任何内容。将插入x作为参照

当解引用x[0]时,得到x


x==x[0]

这里没有循环。您正在创建一个空数组并将其设置为
x
。然后下一行
x.push(x)
只是将一个空数组推入
x
。如果要添加do
x,请按(x)
它会再次将一个数组推入第一个索引中有一个空数组的
x

“当您选中“否,您只需添加一个自身引用”时,是否会按程序生成新级别。没有“级别”。您在浏览器中与
window.self
window.self===window
具有相同的功能。因此,您可以执行
window.self.self
window.window.window
。这是循环引用的最短形式。谢谢,这很有意义。变量名x是对内存位置的引用,但对同一对象的引用可以是任意数量的重复引用。我想我很困惑,因为我通常认为数组和对象是包含的分支树结构,但它们当然不必遵守这些结构约束。打破这种思维习惯很好。是的,把它们想象成树是有道理的。在这种情况下,它将更像是一个普通的图形,尽管有一个节点有一个自循环。@Prasanth-我不确定还有什么要说的。我在x上尝试的第一件事是JSON.stringify,并返回了一个错误。我从来不知道有环形结构存在。。你知道这些有什么实际用途吗?@Prasanth我想不出一个对包含自身的数组有用的用例,但很可能存在一个。@Prasanth:我不会说它们有“实际用途”,它们是能够在两个方向上遍历某个对象的结果。例如,DOM节点有一个
子节点
属性,允许向下遍历,但也有一个
父节点
属性,允许向上遍历。这就产生了一个循环引用。我想你不小心发了两次。你可能想删除一个答案,然后根据需要编辑另一个。是的,我注意到了,并删除了这篇文章。至少我认为我做到了,你还在看我的2张吗?没问题。谢谢你的提醒。
x[0][0][0]