我们知道,js的数组是可以使用展开运算符展开数据的,原因是Array具有Symbol.iterator迭代器接口,但是对象是没有该迭代器接口的,如果直接用[...]展开运算符展开对象是报错的
1、 实现方法
之所以使用Reflect.ownKeys来获取obj的key值而不是采用Object.keys(),是因为假如obj有symbol属性时,后者是没有办法获取值的
let obj = {name: 'cch', age: 23, number: 23}
obj[Symbol.iterator] = function(){
return {
next: function () {
let keyArr = Reflect.ownKeys(obj)
if(this.index < keyArr.length - 1){
let key = keyArr[this.index]
this.index++
return {
value: obj[key]
}
} else {
return {done: true}
}
},
index: 0
}
}
console.log([...obj])
2、Reflect.ownKeys() 与 Object.keys() 的区别