javascript - 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?
它是机器相关的,它是基于编译器的吗?
不,我不确定这是否有任何实际用途,但它仍然是我很好奇的东西。
解决方案
通常,您可以嵌套不同的数组,直到内存不足,但您可以嵌套相同的数组并获得有效的无限深度数组。
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.
推荐阅读
- python - TensorFlow Jupyter Notebook 中的 Matplotlib
- highcharts - 动态更改条形颜色 - highcharts
- git - 从裸 git 存储库推送
- swift - 转换 2 个类似的计算属性以在 Swift 中使用 1 个可重用函数?
- python - 使用正则表达式从字符串列表中解析 ID
- javascript - 为什么我使用 splice 时我的功能不起作用?
- java - 在请求正文中使用时配置属性未自动装配?
- python - 当整数字段中的字符串时,Django Queryset 崩溃
- c# - Action 方法的 JSON Camel Case 属性
- neo4j - neo4j 索引失败,属性大小太长