Javascript有关联数组吗?

Javascript有关联数组吗?,javascript,Javascript,Javascript有关联数组吗?请解释。JavaScript中类似的东西是对象 var my_obj = { key : 'value' } 我们拥有的最接近的东西是一个物体;定义它的最简单方法是使用对象文字语法 var assocArray = { key: 1, key2: 2 }; 但是,您应该注意以下几点: 它没有.length属性 您应该使用for in对其进行迭代,而不是使用for(;;),但应将其与hasOwnProperty()结合使用: 没有对成员进行排序

Javascript有关联数组吗?请解释。

JavaScript中类似的东西是对象

var my_obj = { key : 'value' } 

我们拥有的最接近的东西是一个物体;定义它的最简单方法是使用对象文字语法

var assocArray = {
   key: 1,
   key2: 2
};
但是,您应该注意以下几点:

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

  • 没有对成员进行排序/排序的概念。虽然我所知道的所有实现都是按照成员添加的顺序迭代成员,但这并不是标准化的


  • 没有;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
    更容易)如果需要键/值对,请使用对象。如果需要枚举列表,请使用数组。

    而不是关联数组。Javascript有
    对象
    <对象的代码>属性
    使用字符串寻址

     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
    
    请参见

    确定它是(某种类型,使用对象)

    可通过

    foo.bar
    

    这个答案几乎是我以前的答案的复制粘贴

    自从提出这个问题以来,五年来情况发生了变化。

    由于弱类型,可以在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
    

    不需要在}之后可能重复分号。我很好奇为什么您推荐枚举数组和映射对象。你能详细说明一下吗?
    >> names.length
    0
    
    >> 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