js foreach 遍历对象key的顺序

用了好久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遍历完之后进行遍历,
如有其它情况欢迎补充指正

你可能感兴趣的:(前端,学习)