结论
- 声明变量keys值为一个空列表(List类型)
- 把每个Number类型的属性,按数值大小升序排序,并依次添加到keys中
- 把每个String类型的属性,按创建时间升序排序,并依次添加到keys中
- 把每个Symbol类型的属性,按创建时间升序排序,并依次添加到keys中
通过Object.keys()可验证;
eg
1 | Object.keys({ |
上面介绍的排序规则同样适用于下列API:
- Object.entries
- Object.values
- for…in循环
- Object.getOwnPropertyNames
- Reflect.ownKeys
注意:以上API除了Reflect.ownKeys之外,其他API均会将Symbol类型的属性过滤掉。
Array.sort方法不稳定原因
可参考文档Array.protopyte.sort
原因
- 默认排序顺序是根据字符串Unicode码点
- 也可指定比较函数compareFunction
- 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前
- 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变
- 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前
- compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。