Javascript是否有关联数组?

时间:2011-10-06 13:29:16

标签: javascript

Javascript是否有关联数组?请解释一下。

6 个答案:

答案 0 :(得分:5)

都能跟得上; JavaScript数组只是数字键和混合值。使用对象可以实现同样的事情(或者,实际上,它与其他语言中的关联数组完全相同):

var foo = {
  a: 123,
  b: 'CDE'
};

foo.a; // 123
foo['a']; // 123

您可以使用数组:

var foo = [];
foo.a = 123;
foo.b = 'CDE';

foo.b; // CDE
foo['b']; // CDE

但是,这应该从不完成,因为这不会将键/值对输入到数组中,而是将它们作为属性添加到数组对象中。 (此外,{a: 123}a = []; a.a = 123更容易)如果需要键/值对,请使用对象。如果需要枚举列表,请使用数组。

答案 1 :(得分:2)

这个答案几乎是我之前在this question上的答案的复制粘贴。

自提出此问题以来的五年中,情况发生了变化。

由于类型较弱,关联数组可能在JavaScript中伪造

>> var names = new Array();
undefined

>> names["first"] = "Dotan";
"Dotan"

>> names["last"] = "Cohen";
"Cohen"

>> for ( key in names ) { console.log(key+" "+names[key]) }
undefined
first Dotan
last Cohen

有时有用,自2012年以来发布的所有浏览器都支持它,但有警告!数组无法简单地回读:

>> names
Array [  ]

更重要的是,数组的长度无法轻松检索:

>> names.length
0

因此,这不是一个关联数组,因为JavaScript本来就支持它,而是一个解决方法,如果出于某种原因,真正的JS对象不支持你需要的东西,这通常很有用:

>> var names = {};
undefined

>> names.first = "Dotan";
"Dotan"

>> names.last = "Cohen";
"Cohen"

>> for ( key in names ) { console.log(key+" "+names[key]) }
undefined
first Dotan
last Cohen

>> names
Object { first: "Dotan", last: "Cohen" }

>> Object.keys(names).length
2

答案 2 :(得分:1)

我们最接近的是一个物体;最简单的方法是使用对象文字语法。

var assocArray = {
   key: 1,
   key2: 2
};

你应该警惕一些事情:

  1. 它没有.length属性。
  2. 您应该使用for in对其进行迭代,而不是for(;;;);,但应将其与hasOwnProperty()结合使用:

    for (var x in assocArray) {
        if (assocArray.hasOwnProperty(x)) {
            // x = the key, assocArray[x] = the value 
        }
    }
    
  3. 没有对成员进行排序/排序的概念。虽然我所知道的所有实现都按照添加的顺序迭代成员,但这并不是标准化的。

答案 3 :(得分:1)

而不是关联数组。 Javascript有objects。使用字符串寻址对象的Properties

 var obj1 = {};  // declare empty object
 var obj2 = {a: 1, b: 'string', c: [4,5]}; // obj with 3 properties, a, b, and c
        // note that the 'c' property contains an anonymous array 

 alert(obj2.a); // shows 1
 obj2.a = 'another string'; // redefine the 'a' property
 obj2.cookie = 'oatmeal'; // add a new property to the object
 obj2['ice_cream'] = {vendor: 'Beyers', 
                      flavor: 'Chocolate Surprise'}; // add anonymous object as
                           // a new property for the object

 assert(obj2.a === obj2['a']); // two ways to retrieve the value
 var i = 'a'; // using an index varable
 assert(obj2.a === obj2[i]);  // note the i does not have apostrophes around it

请参阅Quirksmode docs

答案 4 :(得分:0)

JavaScript中可比较的东西是一个对象。

var my_obj = { key : 'value' } 

答案 5 :(得分:0)

确实(确实如此,使用对象)

var foo = {
      bar: "hello"
}

可通过

访问
foo.bar