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

js-*_*der 24 javascript php arrays

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

$myArray = array('a' => 'b'); // PHP Way
Run Code Online (Sandbox Code Playgroud)

在JavaScript中我会这样做:

var myArray = [];
myArray['a'] = 'b';
Run Code Online (Sandbox Code Playgroud)

我不是在寻找JavaScript对象.

Kar*_*oll 26

声明一个这样的对象:

var myArray = {"a": "b", "c": "d"};
Run Code Online (Sandbox Code Playgroud)

...然后像这样引用每个项目:

var somethingElse = myArray["a"]; //Sets "somethingElse" to "b".
Run Code Online (Sandbox Code Playgroud)

正如@Chris和@Marc在评论中提到的:在JavaScript中,对象是关联数组,反之亦然,它们只是指两种不同的方式来做同样的事情.例如...

var somethingElse = myArray["a"];
var anotherVariable = myArray.a;
Run Code Online (Sandbox Code Playgroud)

... 做同样的事.


Álv*_*lez 26

JavaScript没有关联数组.在您的示例中,您将声明myArray为数组,然后为其分配对象.所以你的代码与此没有什么不同:

var myObject = {};
myObject['a'] = 'b';
Run Code Online (Sandbox Code Playgroud)

更新:稍作修正.实际上,原始代码不会破坏数组.它只是附加一个常规属性.这是可能的,因为JavaScript数组是JavaScript对象的子集.

  • 废话.当然javascript有关联数组.对于所有意图和目的来说,这就是Javascript Object*IS*.如何在引擎盖下工作既不在这里也不在那里. (6认同)
  • @RichardRiley - JavaScript对象是[无序的属性集合](http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order).*order*的概念可能是数组的关键点. (2认同)

kar*_*m79 7

我不是在寻找JavaScript对象.

JavaScript中没有"关联数组",只有由属性名称和值组成的对象可以这样处理.所以,你所寻找的实际上是对象.实际上,您的问题中的这个示例是使用对象:

var myArray = [];
myArray['a'] = 'b';
alert(typeof myArray); // 'object'
Run Code Online (Sandbox Code Playgroud)

您最初使用数组文字语法构造对象:

var myArray = [];
Run Code Online (Sandbox Code Playgroud)

这意味着你创建了一个继承自的对象Array.prototype.基本上,你正在处理一个已经使用存储的方法进行扩充的对象Array.prototype.

要检查它myArray实际上是一个数组(好吧,我会说JavaScript数组是伪数组),你可以检查它的构造函数:

alert(typeof myArray === 'object' && myArray.constructor === Array);
Run Code Online (Sandbox Code Playgroud)

还有一种更好的方法可以识别在不同窗口和框架中构建的数组:

alert(Object.prototype.toString.apply(myArray) === '[object Array]');
Run Code Online (Sandbox Code Playgroud)

您还可以使用instanceOf:

alert(myArray instanceof Array);
Run Code Online (Sandbox Code Playgroud)

或者Array.isArray:

alert(Array.isArray(myArray));
Run Code Online (Sandbox Code Playgroud)


Mar*_*ult 6

在 javascript 中,关联数组、键控集合、散列……无论您想怎么称呼它们,都不是特殊类型。以下都是好的。

a = {}
a[3] = 15
a.b = "c"
a['def'] = 'something'
Run Code Online (Sandbox Code Playgroud)

此代码生成具有您期望的属性的单个有效对象。他们都。您可以在一个对象中组合传统索引数组和关联数组。

至于一次声明一大堆,通常的语法是:

a = {
    'key1' : 'val1',
    'key2' : val2,
    key3 : val3,
    key4 : "val4"
}
Run Code Online (Sandbox Code Playgroud)