猿问

为什么js的数组会根据下标字段的类型进行排序?

<script>

  var a=new Array(3)

  a["a"]=1

  a["c"]=2

  a["b"]=3

  a[5]=4

  a["x"]="xasd"

  a[""]="dd"

  a[3]=5

  for (b in a)

     document.write(b,"--",a[b],"*<br>")

 </script>

结果为

3--5*

5--4*

a--1*

c--2*

b--3*

x--xasd*

--dd*

这里js把数字类型下标的放在了前面,字符类型的放在了后面,而且把数字类型下标小的放在了前面,比如a[3]尽管出现得比a[5]晚,但是遍历输出的时候放在了前面。而字符类型的下标就没有这样的排序,是按照赋值的顺序出现的。


翻阅古今
浏览 751回答 2
2回答

胡子哥哥

数字下标和字符串作为属性名其实完全不是一回事虽然你前面用new Array(3)来初始化的a,其实这时的a仅仅是初始化为[undefined,undefined,undefined],但后面a["a"]=1之类其实已经不是给数组元素赋值了,而是给a对象的属性设置属性值了,注意这些值不会导致数组对象的length属性值改变的。console.log(a);console.log(a.length);console.log(a[2]);&nbsp; a["a"]=1&nbsp; a["c"]=2&nbsp; a["b"]=3&nbsp; console.log(a.length);&nbsp; a[5]=4&nbsp; console.log(a.length);&nbsp; a["x"]="xasd"&nbsp; a[""]="dd"&nbsp; a[3]=5&nbsp; console.log(a);&nbsp; console.log(a.length);&nbsp; for (b in a)&nbsp; &nbsp; &nbsp;document.write(b,"--",a[b],"*<br>")如果按上面的代码,你可以看到更多细节

噜噜哒

for in&nbsp;不保证遍历顺序另外所谓的“字符类型下标”和数字下标不是一回事,只是添加在数组对象上的属性。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答