微参考 js JavaScript中"for…in"与"for…of"循环的差异

JavaScript中"for…in"与"for…of"循环的差异

JavaScript 中,`for…in` 和 `for…of` 是两种用于遍历数据的循环结构。尽管它们都可以用来遍历数组或对象,但它们之间存在一些关键的区别。下面,我们来深入探讨这两种循环的用法及其不同之处。

`for…in` 循环

`for…in` 循环设计之初是为了遍历对象的键。然而,它也可以用于遍历数组,但这并不是它的设计意图。

用法

// 遍历对象

const obj = { a: 1, b: 2, c: 3 };

for (let key in obj) {

if (obj.hasOwnProperty(key)) { // 过滤掉原型链上的属性

console.log(key); // 输出 a, b, c

}

}

// 遍历数组

const arr = [1, 2, 3];

for (let index in arr) {

console.log(index); // 输出 0, 1, 2

}

注意事项

1. `for…in` 循环遍历的是对象的键名,不仅仅是自身的键名,还包括原型链上的可枚举属性。

2. 为了避免遍历到原型链上的属性,通常与 `hasOwnProperty` 方法一起使用,以确认属性是否是对象自身的属性。

3. 当用于数组时,它返回的是索引(字符串形式),而不是元素值。

4. `for…in` 循环无法保证属性的顺序。

`for…of` 循环

`for…of` 循环是 ES6 引入的,它可以用于遍历具有迭代器(`[Symbol.iterator]`)的对象,包括数组、字符串、Set 和 Map 等。

用法

// 遍历数组

const arr = [1, 2, 3];

for (let value of arr) {

console.log(value); // 输出 1, 2, 3

}

// 遍历字符串

const str = 'abc';

for (let char of str) {

console.log(char); // 输出 a, b, c

}

注意事项

1. `for…of` 循环只遍历对象自身的属性,不包括原型链上的属性。

2. 它直接返回数组或集合的元素值,而不是索引或键名。

3. `for…of` 循环支持 `break` 和 `continue` 语句。

4. 对于 Set 或 Map 等数据结构,`for…of` 循环提供了更直观的遍历方法。

总结

在选择 `for…in` 和 `for…of` 时,应当考虑以下因素:

JavaScript中"for...in"与"for...of"循环的差异

  • 如果目的是遍历对象的键名,并且需要包括原型链上的属性,应当使用 `for…in`。
  • 如果目标是遍历数组或其他可迭代对象的元素值,`for…of` 是更合适的选择。
  • 在性能上,`for…of` 循环通常比 `for…in` 循环更高效,尤其是在遍历大型数组时。
  • 使用 `for…of` 可以确保遍历的顺序与数据结构中元素的顺序一致。

在编写 JavaScript 代码时,选择正确的循环结构不仅有助于提高代码的可读性和可维护性,还能在性能上带来优势。

本文来自网络,不代表微参考立场,转载请注明出处:http://www.weicankao.com/js/737.html
上一篇
下一篇
返回顶部