乐闻世界logo
搜索文章和话题

for..of 和 for...in 是否可以直接遍历对象?

浏览6
6月24日 16:43

for...of 循环是在ES6中引入的,它专门用于遍历可迭代对象的元素,如数组、字符串、Map、Set 等这些实现了迭代器接口的数据结构。所谓的可迭代对象就是那些具有 Symbol.iterator 属性的对象。

例如,数组是可迭代对象,可以使用 for...of 遍历其元素:

javascript
let array = [10, 20, 30]; for (let value of array) { console.log(value); } // 输出: // 10 // 20 // 30

然而,普通对象不是可迭代的,没有实现 Symbol.iterator 方法,因此不能直接使用 for...of 遍历它的属性。尝试使用 for...of 直接遍历一个对象会导致一个错误:

javascript
let obj = {a: 1, b: 2, c: 3}; for (let value of obj) { console.log(value); } // TypeError: obj is not iterable

另一方面,for...in 循环是用来遍历一个对象的所有可枚举属性的键,包括继承的可枚举属性。它不仅可以遍历普通对象的属性,还可以遍历数组(虽然通常不推荐这样做,因为它会返回数组索引,而且可能会遍历到原型链上的属性)。

使用 for...in 遍历对象的例子:

javascript
let obj = {a: 1, b: 2, c: 3}; for (let key in obj) { console.log(key + ': ' + obj[key]); } // 输出: // a: 1 // b: 2 // c: 3

总结一下,for...of 用于遍历可迭代对象的元素,而 for...in 用于遍历对象的所有可枚举属性的键。因此,for...of 不能直接遍历普通对象,而 for...in 可以。

标签:JavaScript前端