首页 > 解决方案 > JavaScript 中数组的最大深度

问题描述

因此,有一天当我在 Stack Overflow 中遇到这个问题并好奇时,我进行了实验:JavaScript 中数组的最大大小(JavaScript 中数组的最大大小)。

问题是,JavaScript 中数组的最大深度是多少?

我所说的深度是指在 JavaScript 放弃之前,你可以在数组中嵌套多少数组?

[1]           // Depth Level: 1
[1, [2]]      // Depth Level: 2
[1, [2, [3]]] // Depth Level: 3
[1, [...]]    // Depth Level: x?

它是机器相关的,它是基于编译器的吗?

不,我不确定这是否有任何实际用途,但它仍然是我很好奇的东西。

标签: javascriptarrays

解决方案


通常,您可以嵌套不同的数组,直到内存不足,但您可以嵌套相同的数组并获得有效的无限深度数组。

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

x[0][0][0](...)[0]; // Now valid

[ [Circular] ]在大多数调试器中都会出现,因为它是所谓的“循环引用”,因为数组包含自身。

这类似于如何拥有自引用对象:

var x = { };
x.x = x;

// { x: [Circular] }

x.x.x.x.x.x.x.x.x(...).x; // Now valid

JavaScript 本身并不真正关心事物的深度,该语言没有内在限制。有时循环引用是一种特征,例如为了方便x.y而引用的东西x,一种显示相互关联的方式。这在技术上是无限的深度,但您不太可能以这种方式使用它。

这是该现象的一个简单示例:

var x = { };
var y = { };

x.y = y;
y.x = x;

x.y.x.y.x.y; // Pointless, but valid.

推荐阅读