for in 遍历对象的可枚举属性。 const num = [1, 2] Object.defineProperty(Object.getPrototypeOf(num), '2', { value: 3, enumerable: true, writable: true }) for (const key in num) { console.log(num[key]) } // 1 // 2 // 3 for of 遍历可迭代对象,输出内容与迭代器有关。 const obj = { number: 4, // [Symbol.iterator]: function () { // let index = 1 // return { // next: () => ({ // value: index, // done: index++ == this.number // }) // } // }, [Symbol.iterator]: function* () { for (let index = 1; index < this.number; index++) { yield index } } } for (const iterator of obj) { console.log(iterator) } // 1 // 2 // 3