NO --- 25 Object.keys()
大家在遍历对象时经常会用到Object.keys()这个方法,但是有时候遍历出来的keys会排序,而有时候却按照对象中的顺序来出现,先看下面两个例子:
// 例子1
const obj = { 100: '一百', 2: '二', 7: '七' } Object.keys(obj) // ["2", "7", "100"]
// 例子2 const obj = { c: 'c', a: 'a', b: 'b' } Object.keys(obj) // ["c", "a", "b"]
这时就会发现两个例子的区别,例子1中的key会排序,例子2中则原样输出,这是为什么呢?
答案:
对于上面那个问题先给出结论,Object.keys在内部会根据属性名key的类型进行不同的排序逻辑。分三种情况:
- 如果属性名的类型是
Number,那么Object.keys返回值是按照key从小到大排序 - 如果属性名的类型是
String,那么Object.keys返回值是按照属性被创建的时间升序排序。 - 如果属性名的类型是
Symbol,那么逻辑同String相同
这就解释了上面的问题。

浙公网安备 33010602011771号