JS里for in和for of的对比
时间: 2023-07-12 17:43:59 浏览: 44
`for-in` 和 `for-of` 都是用来遍历数据结构的循环语句,但是它们的用途和行为是不同的。
1. `for-in` 循环:
`for-in` 循环适用于遍历对象的属性。它枚举对象的属性名称,而不是属性值。示例如下:
```javascript
const obj = { a: 1, b: 2, c: 3 };
for (const prop in obj) {
console.log(prop); // a b c
}
```
注意,`for-in` 循环枚举的是对象的可枚举属性(包括自有属性和继承属性)。
2. `for-of` 循环:
`for-of` 循环适用于遍历可迭代对象的元素。它枚举对象的属性值,而不是属性名称。示例如下:
```javascript
const arr = [1, 2, 3];
for (const val of arr) {
console.log(val); // 1 2 3
}
```
`for-of` 循环遍历的是可迭代对象的元素,包括数组、字符串、Set、Map 等。在遍历数组时,`for-of` 循环会遍历数组的元素,而忽略数组的索引属性和其他非迭代属性。
总之,`for-in` 循环适用于遍历对象的属性,而 `for-of` 循环适用于遍历可迭代对象的元素。
相关问题
js中for in 和for of
在 JavaScript 中,`for...in` 和 `for...of` 是用于遍历数据的两种不同的循环结构。
`for...in` 循环用于遍历对象的可枚举属性。它会迭代对象的所有可枚举属性(包括原型链上的属性),并将每个属性的键(key)存储在变量中。这个循环适用于遍历对象,而不是数组或类似数组的结构。
以下是 `for...in` 循环的语法:
```javascript
for (variable in object) {
// statements
}
```
示例:
```javascript
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
console.log(key); // 输出:a, b, c
console.log(obj[key]); // 输出:1, 2, 3
}
```
`for...of` 循环用于遍历可迭代对象(如数组、字符串、Set、Map 等)。它会迭代对象中的每个元素,并将每个元素的值存储在变量中。这个循环适用于遍历有序集合。
以下是 `for...of` 循环的语法:
```javascript
for (variable of iterable) {
// statements
}
```
示例:
```javascript
const arr = [1, 2, 3];
for (let value of arr) {
console.log(value); // 输出:1, 2, 3
}
```
需要注意的是,`for...of` 循环在遍历对象时无法直接使用,因为对象不是可迭代对象。如果要遍历对象的属性,可以使用 `Object.keys()` 方法或结合 `for...in` 循环来实现。
js for in 和for of
回答: 在JavaScript中,for-in和for-of是两种不同的循环语句用于遍历对象或数组的元素。for-in循环用于遍历对象的可枚举属性,而for-of循环用于遍历可迭代对象的元素。
for-in循环通过遍历对象的属性来执行循环。它会遍历对象自身的可枚举属性以及继承的可枚举属性。在循环中,可以使用break、continue和return语句来控制循环的行为。[1]例如,对于一个数组,for-in循环会遍历数组的索引,以及数组对象的自定义属性。
for-of循环用于遍历可迭代对象的元素。它可以遍历字符串、数组、Set、Map等可迭代对象。在循环中,可以使用break和continue语句来控制循环的行为。与for-in不同,for-of循环不会遍历对象的属性,只会遍历对象的元素。[2]例如,对于一个字符串,for-of循环会遍历字符串的每个字符。
需要注意的是,for-of循环只会遍历当前对象的可迭代元素,不会遍历原型链上的属性。[3]例如,对于一个对象,for-of循环只会遍历对象自身的可迭代属性,而不会遍历继承的属性。
总结起来,for-in循环用于遍历对象的属性,而for-of循环用于遍历可迭代对象的元素。它们在遍历的对象和行为上有所不同。