据我所知,associative arrays
没有javascript
,只有objects
。
但是我可以使用array
创建一个带字符串键的bracket notation
,如下所示:
var myArray = [];
myArray['a'] = 200;
myArray['b'] = 300;
console.log(myArray); //prints [a: 200, b: 300]
所以,我想在不使用bracket notation
的情况下做同样的事情
var myNewArray = [a: 200, b: 300]; //getting error - Unexpected token:
这也行不通
var myNewArray = ['a': 200, 'b': 300]; //same error, why can I not create?
JavaScript没有关联数组,只有对象。甚至JavaScript数组基本上也只是对象,只是特殊的东西,属性名称是数字(0,1,...)。
所以先看看你的代码:
var myArray = []; // creating a new array object
myArray['a'] = 200; // setting the attribute a to 200
myArray['b'] = 300; // setting the attribute b to 300
重要的是要了解myArray['a'] = 200;
与myArray.a = 200;
相同!
所以从你想要的开始:你不能创建一个javascript数组,并在一个语句中传递没有数字属性。
但这可能不是你所需要的!可能你只需要一个JS对象,它与其他语言中的关联数组,字典或映射基本相同:它将字符串映射到值。这很容易做到:
var myObj = {a: 200, b: 300};
但重要的是要明白,这与你所做的略有不同。 myObj instanceof Array
将返回false
,因为myObj
不是原型链中Array
的祖先。
你可以使用Map:
var arr = new Map([
['key1', 'User'],
['key2', 'Guest'],
['key3', 'Admin'],
]);
var res = arr.get('key2');
console.log(res); // The value is 'Guest'
好吧,你正在创建一个数组,实际上是一个对象。
var arr = [];
arr.map;
// function(..)
arr['map'];
// function(..)
arr['a'] = 5;
console.log(arr instanceof Object); // true
您可以向arr
添加字段和函数。它不会将它们“插入”到数组中(如arr.push(...)
)
您可以使用[]
语法引用对象字段
在这种情况下,您想要使用对象
var myObject = {'a' : 200, 'b' : 300 };
这个答案链接到更深入的解释:How to do associative array/hashing in JavaScript(http://blog.xkoder.com/2008/07/10/javascript-associative-arrays-demystified/)
数组和对象是不同的东西。
对于对象,您可以执行以下操作:
var obj = { "property1": "value1" };
obj.property2 = "value2";
对于数组,您必须这样做:
var arr = [];
arr[0] = "value";