为什么数组中的字符串索引不会增加“长度”?

在下面的示例中,array2.length只是10,而在我看来应该是13。


为什么“字符串键控”索引不增加length数组的?


我可以存储内容并仍然访问它,VS调试器显示这些数组已正确存储。那么为什么length不增加呢?


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 = "";


汪汪一只猫
浏览 403回答 3
3回答

料青山看我应如是

Javascript数组不能具有“字符串索引”。Javascript Array仅在数字上进行索引。设置“字符串索引”时,就是在设置对象的属性。这些是等效的:array.a = 'foo';array['a'] = 'foo';这些属性不是数组“数据存储”的一部分。如果要“关联数组”,则需要使用一个对象:var obj = {};obj['a'] = 'foo';也许最简单的可视化方法是使用文字符号而不是new Array:// numerically indexed Arrayvar array = ['foo', 'bar', 'baz'];// associative Objectvar dict = { foo : 42, bar : 'baz' };

小唯快跑啊

因为长度定义为 1加数组中最大的数字索引。var xs = [];xs[10] = 17;console.log( xs.length ); //11因此,如果要使用字符串作为键,则应仅使用数组来存储按数字索引的内容,而应使用纯对象。另外,作为一个附带说明,使用像[]或{}代替new Arrayand的文字是一种更好的做法new Object。

阿晨1998

如上所述,将对象用于关联数组。如果您不这样做,您将不一定会注意到自己做错了,直到您无辜地将“ length”用作数组索引:var myArray = [];myArray["foo"] = "bar"; //worksconsole.log(myArray["foo"]) //print "bar"myArray["length"] = "baz" //crash with a "RangeError: Invalid array length"这是因为您length要用String 替换数组的属性,这是无效的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript