本文共 1155 字,大约阅读时间需要 3 分钟。
话不多说,直接上代码
let arr = ['a', 'b', 'c']for (let item of arr) { console.log(item) // a b c}
let obj = { a: 100, b:200}for (let item of obj) { console.log(item) // obj is not iterable}
首先我们需要知道这是什么意思:obj 是不可迭代的意思很好理解,但什么事可迭代的?什么又是不可迭代的?按照官方来说: 首先我们有一个《迭代协议》,它规定了迭代与实现的逻辑 然后有 迭代器,它是具体的迭代实现逻辑 之后是 迭代对象,它是可被迭代的对象 最后是 迭代语句,我们通过它来进行迭代那么最重要的就是:如何分辨是否是迭代对象?其实很简单:拥有 [Symbol.iterator] 方法就是可迭代的对象。如:
当然是可以的,不然哪有这篇文章,直接上代码吧
let obj = { a: 100, b:200}obj[Symbol.iterator] = function() { let keys = Object.keys(obj) let len = keys.length let values = Object.values(obj) let n = 0 return { next: function() { if (n < len) { return { value: {k: keys[n], v: values[n++]}, done: false } } else { return { value: '', done: true // 注意,一旦 done 为 true ,此时的 value 不返回 } } } }}console.log(obj)for (let {k, v} of obj) { console.log(k, v) // a 100 // b 200}
转载地址:http://gxprn.baihongyu.com/