Javascript:数组不为空,但大小为0

我在Javascript中创建一个数组.我想将数组用于键值对.

我可以成功添加新项目并删除项目,但它的长度始终为0.

实际上我遇到的问题是当我想将它转换为JSON字符串时,它显示空字符串:“[]”.我只是想知道他们是否相关.我也想知道为什么我不能转换它.

下面是调试信息,它显示数组包含3个对象但长度为0.浏览器是用于Ubuntu的Firefox 44.0.

谢谢!

Array with length <code>0</code> and properties <code>1454073967313</code>, <code>1454073968645</code>, and <code>1454073969737</code>

研究员@georg的想法,我将索引限制在1000并将其余代码保留为以前.一切正常,包括JSON部分.
下图显示在我的数组中,实际有4个元素,最大索引是805.

enter image description here

我学到的一件事是Javascript数组的长度不是实际大小,而是最大索引号.

最新的发现,数组真的和最大的索引号一样长.元素的其余部分是Null.

最佳答案
这是javascript中的许多奇怪之处.

> a = []
[]
> a[4294967295] = 1
1
> a.length
0 // wtf?

问题是Array.length限制为32位,因此其最大值为2 ^ 32-1 = 4294967295.如果您提供的索引大于或等于4294967295,引擎会像往常一样在数组中创建一个新条目,但拒绝更新其长度 – 不会抛出任何错误.所以你最终得到一袋属性,长度等于0.

正如其他人所建议的那样,如果您拥有如此庞大的数字索引,最好还是使用对象.

转载注明原文:Javascript:数组不为空,但大小为0 - 代码日志