自动排序
const obj={
100:'一百',
2:'二',
7:'七'
}
console.log(Object.keys(obj)); //["2","7","100"]
不自动排序
const obj = {
c: 'c',
a: 'a',
b: 'b'
}
Object.keys(obj) // ["c", "a", "b"]
原因:Object.keys()
在内部会根据属性名key
的类型进行不同的排序;
- 属性名的类型是
Number
,那么Object.keys
返回值是按照key
从小到大排序; - 属性名的类型是
String
,那么Object.keys
返回值是按照属性被创建的时间升序排序; - 属性名的类型是
symbol
,逻辑同string
注意:上面的排序规则同样适用于Object.entries , Object.values , for in循环 ,Object.getOwnPropertyNames,Reflect.ownKeys,除了Reflect.ownKeys之外,其他API均会将Symbol类型的属性过滤掉