我在Javascript中创建一个数组。我想将数组用于键值对。
我可以成功添加新项目并删除项目,但其长度始终为0.
实际上我遇到的问题是当我想将它转换为JSON字符串时,它显示空字符串:“[]”。我只是想知道他们是否相关。我也想知道为什么我不能转换它。
下面是调试信息,它显示数组包含3个对象,但长度为0.浏览器是用于Ubuntu的Firefox 44.0。
谢谢!
研究员@georg的想法,我将索引限制为1000,并将其余代码保留为以前。一切正常,包括JSON部分。 下图显示在我的数组中,实际有4个元素,最大索引是805。
最新的发现,数组真的和最大的索引号一样长。元素的其余部分是Null。
答案 0 :(得分:12)
这是javascript中的许多奇怪之处。
> a = []
[]
> a[4294967295] = 1
1
> a.length
0 // wtf?
问题是Array.length
限制为32位,因此其最大值为2^32-1 = 4294967295
。如果您提供的索引大于或等于4294967295
,则引擎会像往常一样在数组中创建一个新条目,但拒绝更新其length
- 而不会抛出任何错误。所以最终得到一袋属性,length
等于0。
正如其他人所建议的那样,如果您拥有如此庞大的数字索引,最好还是使用对象。