是否有像PHP中那样声明关联数组的简短方法?
$myArray = array('a' => 'b'); // PHP Way
在JavaScript中我会这样做:
var myArray = [];
myArray['a'] = 'b';
我不是在寻找JavaScript对象。
答案 0 :(得分:25)
声明一个这样的对象:
var myArray = {"a": "b", "c": "d"};
...然后参考这样的每个项目:
var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".
正如@Chris和@Marc在评论中提到的:在JavaScript中,对象是关联数组,反之亦然,它们只是指两种不同的方式来做同样的事情。例如......
var somethingElse = myArray["a"];
var anotherVariable = myArray.a;
......做同样的事情。
答案 1 :(得分:25)
JavaScript没有关联数组。在您的示例中,您将myArray
声明为数组,然后为其分配一个对象。所以你的代码与此没有什么不同:
var myObject = {};
myObject['a'] = 'b';
更新:稍作修正。实际上,原始代码不会破坏数组。它只是附加一个常规属性。这是可能的,因为JavaScript数组是JavaScript对象的子集。
答案 2 :(得分:7)
我不是在寻找JavaScript对象。
JavaScript中没有“关联数组”,只有由属性名称和值组成的对象可以这样处理。所以,你所寻找的实际上是对象。实际上,您的问题中的这个示例是使用对象:
var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'
您最初使用数组文字语法构造对象:
var myArray = [];
表示您创建了一个继承自Array.prototype
的对象。基本上,您正在处理一个已使用Array.prototype
中存储的方法进行扩充的对象。
要检查myArray
实际上是一个数组(好吧,我会说JavaScript数组是伪数组),你可以检查它的构造函数:
alert(typeof myArray === 'object' && myArray.constructor === Array);
还有一种更好的方法可以识别在不同窗口和框架中构建的数组:
alert(Object.prototype.toString.apply(myArray) === '[object Array]');
您还可以使用instanceOf
:
alert(myArray instanceof Array);
或Array.isArray
:
alert(Array.isArray(myArray));
答案 3 :(得分:3)
在javascript中,关联数组,键控集合,哈希,......无论你想要什么,它们都不是特殊类型。以下所有都很好。
a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'
此代码生成一个具有您期望的属性的有效对象。他们都是。您可以在一个对象中组合常规索引数组和关联数组。
对于一次声明一大堆,通常的语法是:
a = {
'key1' : 'val1',
'key2' : val2,
key3 : val3,
key4 : "val4"
}