Javascript是否有关联数组?请解释一下。
答案 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
};
你应该警惕一些事情:
.length
属性。您应该使用for in
对其进行迭代,而不是for(;;;);
,但应将其与hasOwnProperty()
结合使用:
for (var x in assocArray) {
if (assocArray.hasOwnProperty(x)) {
// x = the key, assocArray[x] = the value
}
}
没有对成员进行排序/排序的概念。虽然我所知道的所有实现都按照添加的顺序迭代成员,但这并不是标准化的。
答案 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
答案 4 :(得分:0)
JavaScript中可比较的东西是一个对象。
var my_obj = { key : 'value' }
答案 5 :(得分:0)
确实(确实如此,使用对象)
var foo = {
bar: "hello"
}
可通过
访问foo.bar