所以,我尝试有一天,当我在堆栈溢出碰到这个问题就来了,并得到了好奇:在Javascript中数组的最大尺寸(在JavaScript中数组的最大大小).
问题是,JavaScript中数组的最大深度是多少?
深度我的意思是你可以在一个数组中嵌入一个数组,直到JavaScript放弃?
[1] // Depth Level: 1
[1, [2]] // Depth Level: 2
[1, [2, [3]]] // Depth Level: 3
[1, [...]] // Depth Level: x?
Run Code Online (Sandbox Code Playgroud)
它是否依赖于机器,是否基于编译器?
不,我不确定这是否有任何实际用途,但它仍然是我很好奇的东西.
通常,您可以嵌套不同的数组,直到内存耗尽,但您可以嵌套相同的数组并获得有效的无限深度数组。
var x = [ ];
x.push(x);
x[0][0][0](...)[0]; // Now valid
Run Code Online (Sandbox Code Playgroud)
这在大多数调试器中都会出现[ [Circular] ],因为它是所谓的“循环引用”,就像数组包含自身一样。
这类似于拥有自引用对象的方式:
var x = { };
x.x = x;
// { x: [Circular] }
x.x.x.x.x.x.x.x.x(...).x; // Now valid
Run Code Online (Sandbox Code Playgroud)
JavaScript 本身并不真正关心某件事的深度,该语言没有内在的限制。有时循环引用是一种特征,就像x.y指x为了方便而引用的东西,一种显示相互关联的方式。从技术上讲,这是无限深度的,但您不太可能以这种方式使用它。
这是该现象的一个简单示例:
var x = { };
var y = { };
x.y = y;
y.x = x;
x.y.x.y.x.y; // Pointless, but valid.
Run Code Online (Sandbox Code Playgroud)