Object.keys的执行顺序

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致

执行:

1、创建一个空的列表用于存放 keys
2、将所有合法的数组索引按升序的顺序存入(合法的数组索引,即正整数,负数或者浮点数都当作字符串处理)
3、将所有字符串类型索引按属性创建时间以升序的顺序存入
4、将所有 Symbol 类型索引按属性创建时间以升序的顺序存入
5、返回 keys

例:

const testObj = {}

testObj[-1] = ''
testObj[1] = ''
testObj[1.1] = ''
testObj['2'] = ''
testObj['c'] = ''
testObj['b'] = ''
testObj['a'] = ''
testObj[Symbol(1)] = ''
testObj[Symbol('a')] = ''
testObj[Symbol('b')] = ''
testObj['d'] = ''

console.log(Object.keys(testObj))

// ['1', '2', '-1', '1.1', 'c', 'b', 'a', 'd']
// 注意Symbol是没有被返回的

注:
1、严格来说对象属性没有数字类型的,无论是数字还是字符串,都会被当做字符串来处理。
2、返回值只应包含字符串属性(数字其实也是字符串),故Symbol属性是不会被返回的
如果要返回Symbol属性可以用 Object.getOwnPropertySymbols()

参考:https://juejin.cn/post/7041049741458669576

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容