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()