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

时间:2016-01-29 13:56:11

标签: javascript arrays json

我在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。

1 个答案:

答案 0 :(得分:12)

这是javascript中的许多奇怪之处。

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

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

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