为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2019-10-30 12:49:11
在下面的示例中,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 = "";
查看完整描述

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' };


查看完整回答
反对 回复 2019-10-30
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

因为长度定义为 1加数组中最大的数字索引。


var xs = [];

xs[10] = 17;

console.log( xs.length ); //11

因此,如果要使用字符串作为键,则应仅使用数组来存储按数字索引的内容,而应使用纯对象。另外,作为一个附带说明,使用像[]或{}代替new Arrayand的文字是一种更好的做法new Object。


查看完整回答
反对 回复 2019-10-30
?
阿晨1998

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 替换数组的属性,这是无效的。


查看完整回答
反对 回复 2019-10-30
  • 3 回答
  • 0 关注
  • 402 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信