如何让[a,b] = {a:b,b:1}解构赋值成功?

5 阅读1分钟

如何让[a,b] = {a:b,b:1}解构赋值成功?

数组解构本质上就是调用数组的迭代器,迭代器可以用Symbol.iterator这个属性访问。

const arr = [1,2,3]
var [a,b,c] = arr
//本质上是
const iterator = array[Symbol.iterator]()
var a = iterator.next().value
var b = iterator.next().value
var c = iterator.next().value

因为对象本身并不存在迭代器,所有不能用for..of遍历,所以如果我们需要满足题目条件,就得手动为这个对象添加一个迭代器

const obj = {
    a:1,
    b:2,
    [Symbol.iterator](){
        let index = 0 
        let keys = Object.keys(obj)
        return{
            next(){
                if(index<keys.length){
                    return{
                        done:false,
                        value:obj[keys[index++]]
                    }
                }
                return {done:true,value:underfind}
            } 
        } 
    }
}
​
const [a,b] = obj