for…of:根据迭代对象的迭代器具体实现迭代对象数据
话不多说,直接上代码
对数组进行迭代时,取到的是数组的一个个值,对比 for…in(取到的是 key)
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 is not iterable
首先我们需要知道这是什么意思:obj 是不可迭代的
意思很好理解,但什么事可迭代的?什么又是不可迭代的?
按照官方来说:
首先我们有一个《迭代协议》,它规定了迭代与实现的逻辑
然后有 迭代器,它是具体的迭代实现逻辑
之后是 迭代对象,它是可被迭代的对象
最后是 迭代语句,我们通过它来进行迭代
那么最重要的就是:如何分辨是否是迭代对象?其实很简单:拥有 [Symbol.iterator] 方法就是可迭代的对象。
如: