<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]晚,但是遍历输出的时候放在了前面。而字符类型的下标就没有这样的排序,是按照赋值的顺序出现的。
数字下标和字符串作为属性名其实完全不是一回事
虽然你前面用
new Array(3)
来初始化的a,其实这时的a仅仅是初始化为[undefined,undefined,undefined]
,但后面a["a"]=1
之类其实已经不是给数组元素赋值了,而是给a对象的属性设置属性值了,注意这些值不会导致数组对象的length
属性值改变的。如果按上面的代码,你可以看到更多细节