JavaScript - 声明关联数组的简短方法

时间:2011-07-31 15:25:00

标签: php javascript arrays

是否有像PHP中那样声明关联数组的简短方法?

$myArray = array('a' => 'b'); // PHP Way

在JavaScript中我会这样做:

var myArray = [];
myArray['a'] = 'b';

我不是在寻找JavaScript对象。

4 个答案:

答案 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"
}