我需要在javascript中使用integer
键创建一个关联数组,如下所示;
a["10"] = "ten";
但是当我创建一个数组时,它将值放入数组的10th
索引,并创建一个长度为11的数组。我希望它是一个键值对。我知道这可以通过使用对象来完成,但我只需要一个数组。
答案 0 :(得分:8)
JavaScript没有关联数组。在JavaScript中执行此操作的唯一方法是使用对象:
var a = {
'10': 'ten'
};
答案 1 :(得分:1)
ECMAScript 有Associated Arrays 1 - 对象(以及扩展名,数组)是一个例子
然而, some properties of Arrays are treated specially :
Array对象对特定类的属性名称进行特殊处理。属性名
P
(以String值的形式)是一个数组索引,当且仅当{{ 1}}等于ToString(ToUint32(P))
.... 具体来说,每当添加名称为数组索引的属性时,如果需要,将更改length属性,比该数组索引的数值多一个。< / p>
因此,给定P
,表达式arr = []
和arr["1"]
引用相同的属性名称。由于arr[1]
(属性名称)为“1”且P
从上方为0,因此对此类属性的分配会将length
设置为arr.length
或2。
不可能会改变此行为。如果您希望不具有特殊的ToUint32(P)+1
属性,则使用“普通”对象而不是数组。但是,许多length
函数可以与任意对象一起使用(除了一些实现怪癖),它们具有Array.prototype
属性,而对象可以创建它使用length
作为自己的原型。
所有这一切,帖子都没有说明真正的问题是什么。不要以为必须以特定的方式完成,而是考虑解释目的是什么:例如:为什么一个[“10”]?如果对象将在List中使用,那么如果有“11项”会出现什么问题?
1 请在讨论此声明之前阅读文章:名称中的术语“数组”并不意味着有序的序列,也不排除附加的概念长度或使用散列等。如果您使用不同的定义,请确保指定它是什么以及给定操作的期望行为。