3 回答
TA贡献1772条经验 获得超8个赞
Javascript数组不能具有“字符串索引”。Javascript Array仅在数字上进行索引。设置“字符串索引”时,就是在设置对象的属性。这些是等效的:
array.a = 'foo';
array['a'] = 'foo';
这些属性不是数组“数据存储”的一部分。
如果要“关联数组”,则需要使用一个对象:
var obj = {};
obj['a'] = 'foo';
也许最简单的可视化方法是使用文字符号而不是new Array:
// numerically indexed Array
var array = ['foo', 'bar', 'baz'];
// associative Object
var dict = { foo : 42, bar : 'baz' };
TA贡献1863条经验 获得超2个赞
因为长度定义为 1加数组中最大的数字索引。
var xs = [];
xs[10] = 17;
console.log( xs.length ); //11
因此,如果要使用字符串作为键,则应仅使用数组来存储按数字索引的内容,而应使用纯对象。另外,作为一个附带说明,使用像[]或{}代替new Arrayand的文字是一种更好的做法new Object。
TA贡献2037条经验 获得超6个赞
如上所述,将对象用于关联数组。
如果您不这样做,您将不一定会注意到自己做错了,直到您无辜地将“ length”用作数组索引:
var myArray = [];
myArray["foo"] = "bar"; //works
console.log(myArray["foo"]) //print "bar"
myArray["length"] = "baz" //crash with a "RangeError: Invalid array length"
这是因为您length要用String 替换数组的属性,这是无效的。
添加回答
举报