用了好久js的foreach遍历对象,没有认真思考过,无意中遇到一个问题,便好奇foreach的遍历顺序问题,因此写了一些简单代码进行测试
var stu={'ccc':'ccc',
'bbb':'bbb',
'zzz':'z',
'c':'c',
'c222':'2222',
'111':'1111',
'1':'11',
'444':'444',
'333':'333',
'aaa':'aaa1'
};
for(var i in stu){
console.log(i);
}
打印结果为:
1
111
333
444
ccc
bbb
zzz
c
c222
aaa
undefined
现象:1 111 333 444 是数字值从小到大,
ccc bbb zzz ccc c222 aaa 是书写顺序,没有进行排序
(如果按照字母或字符串长度排序,c没有到最前面,aaa也没有到最前面,所以不成立)
得出结论,纯数字的key会按照数字值排序后优先遍历,含有字母的key不排序,并在纯数字key遍历完之后进行遍历,会不会有其它漏掉的情况?又加了几种:
1、数字开头,但含有字母的key
2、含有$ _ 等特殊符号的情况 会不会排序?怎么排序?
var stu={'ccc':'ccc',
'bbb':'bbb',
'zzz':'z',
'c':'c',
'c222':'2222',
'111':'1111',
'1':'11',
'444':'444',
'333':'333','_11':'_xx','1_1':'2_2',
'aaa':'aaa1','$aa':'刀'
};
for(var i in stu){
console.log(i);
}
结果
1
111
333
444
ccc
bbb
zzz
c
c222
_11
1_1
aaa
$aa
undefined
增加了 _11 $aa 1_1 并加在数字后面,它们没有提前,而是按照书写顺序和字符串key一起打印
最终得出结论:
纯数字的key会按照数字值排序后优先遍历,含有字母或特殊符号的key不排序,并在纯数字key遍历完之后进行遍历,
如有其它情况欢迎补充指正