Object.keys 返回属性名排序问题
55utah opened this issue · comments
结论
1. 属性名如果是数字,按从小到大排序输出;如果是字符串或者symbol类型,按属性创建时间先后排序;
2. 如果是数字、字符串、symbol混合,则先输出数字,再字符串,最后symbol
上面规则也适用于以下API
1. Object.entries
2. Object.values
3. for...in循环
4. Object.getOwnPropertyNames
5. Reflect.ownKeys
以上API除了Reflect.ownKeys之外,其他API均会将Symbol类型的属性过滤掉。
例子
Object.keys({
4: '12',
'b': 'b-v',
2: '11',
'a': 'a-v',
0: '222',
'c': 'c-v',
})
// ["0", "2", "4", "b", "a", "c"]
// 可以看到数字属性名被转字符串并按规则组织顺序。
再测试Object.values
Object.values({
4: '12',
'b': 'b-v',
2: '11',
'a': 'a-v',
0: '222',
'c': 'c-v',
})
// ["222", "11", "12", "b-v", "a-v", "c-v"]