在下面的例子中,array2.length只有十,在我看来,它应该是13.为什么"字符串键入"索引不会增加数组的长度?我可以存储并仍可访问它,VS调试器显示这些数组正确存储.那么为什么长度没有增加?
var array2 = new Array();
array2["a"] = new Array();
array2["b"] = new Array();
array2["c"] = new Array();
for (var i = 0; i < 10; ++i)
array2[i] = new Array();
var nothing = "";
for (var i = 0; i < array2.length; ++i)
nothing = "";
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 100
Javascript数组不能有"字符串索引".Javascript Array
完全用数字索引.设置"字符串索引"时,您将设置对象的属性.这些是等价的:
array.a = 'foo';
array['a'] = 'foo';
Run Code Online (Sandbox Code Playgroud)
这些属性不是数组"数据存储"的一部分.
如果需要"关联数组",则需要使用对象:
var obj = {};
obj['a'] = 'foo';
Run Code Online (Sandbox Code Playgroud)
也许最简单的可视化使用文字符号而不是new Array
:
// numerically indexed Array
var array = ['foo', 'bar', 'baz'];
// associative Object
var dict = { foo : 42, bar : 'baz' };
Run Code Online (Sandbox Code Playgroud)
hug*_*omg 12
因为长度被定义为一个加上数组中最大的数字索引.
var xs = [];
xs[10] = 17;
console.log( xs.length ); //11
Run Code Online (Sandbox Code Playgroud)
因此,如果要将字符串用作键,则应仅使用数组来存储由数字索引的内容,而使用普通对象.另外,作为旁注,使用像[]
或{}
代替new Array
和的文字是更好的做法new Object
.