如何把对象的属性名转为一个数组呢 我们还是有一个方法来转的 这个方法是ES6新增的方法之一Object.keys() 那么我们来了解一下Object.keys都可以怎么用吧

一、Object.keys把对象的属性名枚举

1. 普通对象

下图的代码转化

const obj1={
	'one':'111',
	'two':'222',
	'thr':'333',
	'for':'444',
}
//这里可以用一个变量来接收Object.keys转之后的数组
const a=Object.keys(obj1)
//可以看到只是将属性名转为了数组
console.log('a',a)//['one', 'two', 'thr', 'for']
//也可以直接这样使用这个Object.keys转的数组
console.log('Object.keys(obj1)',Object.keys(obj1))//['one', 'two', 'thr', 'for']
//最后可以看到也并不会影响到原对象的数据
console.log('obj1',obj1)//{one: '111', two: '222', thr: '333', for: '444'}
2. 使用Object.create方法创建对象的枚举

Object.create: 可以有两个参数,第一个参数可以改变对象的prototype原型对象,第二个参数可以用来创建一个对象,属性名自定义,属性值需要用一个value来接收 下图的代码转化

const obj2=Object.create({
//修改prototype原型对象
	name:'123'
},{
	name:{
		value:()=>this.foo,
		//如果是通过Object.create进行声明的属性
		//需要我们用enumerable才能用Object.keys枚举出来
		enumerable:true
	}
})
//可以直接对队像的属性进行直接枚举
obj2.foo='aaa'
console.log(Object.keys(obj2))

总结: 也是可以看到如果是Object.create方法创建的对象需要使用enumerable:true才可以进行枚举

3. 对null,undefined,string,number,symbol类型进行枚举
// console.log(Object.keys(null))  //如果是null和undefined会造成报错
// console.log(Object.keys(undefined))  //如果是null和undefined会造成报错
console.log(Object.keys(123))  //如果是Number类型的话会返回一个空数组,因为number类型是可以认为{  : 123}一个没有属性名的对象所以枚举为空数组
console.log(Object.keys('456')) //[0,1,2] //如果是String类型的话因为字符串被看做是一个字符串数组 所以会将这些字符串数组的下标返回出来 
const sa=Symbol('a')
const obj4={}
obj4[sa]='sa'
console.log(Object.keys(obj4))//[]跟number类型不是很一样,这里的symbol是直接枚举不到

二、Object.keys把对象枚举的排序顺序

onst obj4={
	a:'a',
	1:'1',
	5:'5',
	3:'3',
	2:'2',
	0.2:'0.2',
	'-1':'-1',
	e:'e',
	d:'v',
}

//枚举顺序
//数字按照数字的顺序排序  并且 负数不会按照数字的顺序排序,是按定义的的顺序排序
//字母按照定义时候的顺序排序
console.log(Object.keys(obj4))//['1', '2', '3', '5', 'a', '0.2', '-1', 'e', 'd']

三、Object.keys的使用场景

就比如说你登录的时候存了一个用户信息为对象格式,然后退出登录的时候,需要删除用户信息,这个时候你就可以用Object.keys来将这个用户信息,进行枚举然后用来判断是否登录。

关于Object.keys枚举就说这么些