首先举两个个简单的例子:
//数组
let arrs = ['a', 'b', 'c']
//用const确保这个局部变量不被修改
for (const arr in arrs) {
console.log(arr); //0,1,2
}
for (const arr of arrs) {
console.log(arr); //a,b,c
}
//对象
const objs = {"a": 1, "b": 2, "c": 3};
for (const obj in objs) {
console.log(obj) // a, b, c
}
for (const obj of objs) {
console.log(obj) //报错
}
总结一下
for…in 得到的是对象的key或数组、字符串的下标。
ECMAScript 中对象的属性是无序的,因此 for-in 语句不能保证返回对象属性的顺序。
for…of 得到对象的value或数组、字符串的值。
for-of 循环会按照可迭代对象的 next()方法产生值的顺序迭代元素。
为什么会报错呢?

是因为,for…of 循环的数据结构必须包含Symbol.iterator 属性,即具有interator接口,这些数据结构如下:
- Array
- Map
- Set
- String
- arguments对象
- Nodelist对象

本文通过实例解析了JavaScript中for...in用于遍历对象键与数组下标的特点,以及for...of用于获取值的顺序,特别强调了for...of对迭代对象的要求。还解释了为何for...of在对象上报错,涵盖了相关数据结构和符号迭代器的概念。

被折叠的 条评论
为什么被折叠?



