for...of为什么不能遍历Object对象

       因为能够被for...of正常遍历的,都需要实现一个遍历器Iterator。而数组、字符串、Set、Map结构,早就内置好了Iterator(迭代器),它们的原型中都有一个Symbol.iterator方法,而Object对象并没有实现这个接口,使得它无法被for...of遍历。例如:

Array.prototype[Symbol.iterator];

// ƒ values() { [native code] }

String.prototype[Symbol.iterator];

// ƒ [Symbol.iterator]() { [native code] }

Set.prototype[Symbol.iterator];

// ƒ values() { [native code] }

Map.prototype[Symbol.iterator];

// ƒ entries() { [native code] }

Object.prototype[Symbol.iterator];

// undefined

今天(2018/12/14)补充说明一下,如何让对象可以被for of 遍历,当然是给它添加遍历器,代码如下:

Object.prototype[Symbol.iterator] = function() {
    let _this = this
    let index = 0
    let length = Object.keys(_this).length
    return {
        next:() => {
            let value = _this[index]
            let done = (index >= length)
            index++
            return {value,done}
        }
    }
}

 

你可能感兴趣的:(JavaScript)