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

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

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

翻阅古今 2019-02-28 14:50:35
<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]晚,但是遍历输出的时候放在了前面。而字符类型的下标就没有这样的排序,是按照赋值的顺序出现的。
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

数字下标和字符串作为属性名其实完全不是一回事

虽然你前面用new Array(3)来初始化的a,其实这时的a仅仅是初始化为[undefined,undefined,undefined],但后面a["a"]=1之类其实已经不是给数组元素赋值了,而是给a对象的属性设置属性值了,注意这些值不会导致数组对象的length属性值改变的。


console.log(a);

console.log(a.length);

console.log(a[2]);

  a["a"]=1

  a["c"]=2

  a["b"]=3

  console.log(a.length);

  a[5]=4

  console.log(a.length);

  a["x"]="xasd"

  a[""]="dd"

  a[3]=5

  console.log(a);

  console.log(a.length);

  for (b in a)

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

如果按上面的代码,你可以看到更多细节


查看完整回答
反对 回复 2019-03-05
?
噜噜哒

TA贡献1784条经验 获得超7个赞

for in 不保证遍历顺序
另外所谓的“字符类型下标”和数字下标不是一回事,只是添加在数组对象上的属性。

查看完整回答
反对 回复 2019-03-05
  • 2 回答
  • 0 关注
  • 750 浏览
慕课专栏
更多

添加回答

举报

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