不会吧不会吧,我不会是最后一个知道for of不能遍历普通对象的叭
接下来咱们就好好扒一扒这个 for of循环:
for…of 语句在 可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。(来自MDN解释)。
通俗解释就是,for of 循环只能遍历可迭代对象。
那什么是可迭代对象呢?
要成为可迭代对象, 一个对象必须实现 @@iterator 方法。这意味着对象(或者它原型链上的某个对象)必须有一个键为 @@iterator 的属性,可通过常量 Symbol.iterator 访问该属性。
我们最常见的就是用for of 去遍历数组:
let arr = ['tom', 'jerry']
for(item of arr) {
console.log(item); // 分别打印 tom jerry
}
上面打印的 item 就是数组的每一项的值,并不是下标,如果想打印下标,可以用for in 语句
我们展开数组可以看到数组原型链上:
说明数组是可迭代对象。接下来我们看一下普通对象:
我们发现,普通对象确实没有实现 Iterator 方法,不是 可迭代对象,所以for of不能遍历普通对象