Logo
Section 1 / 3

使用 for-in、for-of 与 forEach 遍历

掌握 for-in、for-of 与 forEach 遍历集合的方式与区别

导入

使用 for-in、for-of 与 forEach 遍历

掌握 for-in、for-of 与 forEach 遍历集合的方式与区别

使用 for-in 遍历对象的键

第一种方法是遍历对象的键。for-in 循环的作用就是循环对象的键名。你可以在普通数组上使用 for-in,结果会得到一个索引列表,这些索引按顺序对应每个元素的位置。而在对象上使用时,你会遍历所有成员的名称。

1let list1: (number | string)[] = [1, 2, 3, "a", "b", "c"]; 2for (let i in list1) { // 遍历所有索引,而非值 3 console.log(i); // 输出:0, 1, 2, 3, 4, 5 4}

使用 for-of 遍历对象的值

第二种遍历集合的方式是直接遍历对象的值,这通过 for-of 实现。在数组上使用 for-of 时,会依次获取数组中的每个值。但在对象上使用则不适用,因为 for-of 要求对象必须实现 Symbol.iterator 接口,因此限制更严格。与 for-in 不同,你不能用 for-of 直接遍历字面量对象。

1let list2: (number | string)[] = [1, 2, 3, "a", "b", "c"]; 2for (let i of list2) { // 遍历所有值 3 console.log(i); // 1, 2, 3, "a", "b", "c" 4}

使用 forEach 遍历

forEach 是数组(以及 Map、Set 等)自带的方法,它会对每个元素依次调用回调函数,而不是基于 Symbol.iterator。回调函数的第一个参数是当前元素:如果数组中存放的是数字,收到的就是数字;如果是对象数组,收到的就是对象。回调函数的第二个参数是元素在数组中的索引,第三个参数是整个数组本身,最后一个参数很少使用。

1let list3: (number | string)[] = [1, 2, 3, "a", "b", "c"]; 2list3.forEach((v: string | number, index: number, array: (string | number)[]) => { 3 console.log("值 " + v + " 位于位置 " + index); 4});

类型检查

使用标准 for/while 循环遍历对象