for of和for in区别
时间: 2024-06-13 21:06:36 浏览: 23
for...in和for...of都是用来遍历的属性,但是它们有以下区别:
共性:
- 都可以遍历数组和对象
区别:
- for...in语句用于遍历对象的属性,而for...of语句用于遍历可迭代对象的元素
- for...in语句返回的是对象的键名,而for...of语句返回的是对象的键值
- for...in语句可以遍历对象的原型链上的属性,而for...of语句不行
- for...in语句可以遍历字符串类型的键名,而for...of语句不行
以下是两个例子来说明它们的区别:
1. 遍历对象
```javascript
const obj = { a: 1, b: 2, c: 3 }
// for...in语句遍历对象的属性
for (let i in obj) {
console.log(i) // 输出:a b c
}
// for...of语句不能用于对象
for (let i of obj) {
console.log(i) // 输出:Uncaught TypeError: obj is not iterable 报错了
}
```
2. 遍历数组
```javascript
const arr = [1, 2, 3]
// for...in语句遍历数组的下标
for (let i in arr) {
console.log(i) // 输出:0 1 2
}
// for...of语句遍历数组的元素
for (let i of arr) {
console.log(i) // 输出:1 2 3
}
```
相关问题
for of 和for in区别 foreach
`for...of`和`for...in`是两种不同的循环语句,用于遍历可迭代对象(如数组、字符串、Set等)或对象的属性。
`for...of`循环用于遍历可迭代对象的元素,它会迭代对象的可迭代属性。例如,对于一个数组,`for...of`会遍历数组的每个元素。示例代码如下:
```javascript
const arr = [1, 2, 3];
for (const element of arr) {
console.log(element);
}
```
输出结果:
```
1
2
3
```
`for...in`循环用于遍历对象的可枚举属性(包括继承的属性)。它会迭代对象的键名而不是键值。示例代码如下:
```javascript
const obj = { a: 1, b: 2, c: 3 };
for (const key in obj) {
console.log(key);
}
```
输出结果:
```
a
b
c
```
需要注意的是,`for...in`循环也会迭代对象的原型链上的属性,所以可能会有一些意外的属性被遍历到。而`for...of`只会遍历当前对象的可迭代属性。
另外,对于数组来说,使用`for...in`循环也可以遍历数组元素,但不推荐这样做,因为它会遍历数组的所有可枚举属性,包括数组的原型链上的属性。而`for...of`更适合用于遍历数组。
for in 和for of区别
在 JavaScript 中,for...in 和 for...of 是两种循环语句,用于迭代数组或对象的元素。它们的用法和行为有一些区别。
1. for...in 循环:
for...in 循环用于迭代对象的可枚举属性。它会遍历对象的所有可枚举属性,包括自身的属性和继承的属性。语法如下:
```javascript
for (variable in object) {
// 循环体
}
```
在循环体中,你可以通过 variable 获取到当前迭代的属性名。
示例:
```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
}
```
2. for...of 循环:
for...of 循环用于迭代可迭代对象(如数组、字符串、Set、Map等)的元素值。它会遍历对象的可迭代部分,而不包括对象的属性。语法如下:
```javascript
for (variable of iterable) {
// 循环体
}
```
在循环体中,你可以通过 variable 获取到当前迭代的元素值。
示例:
```javascript
const arr = [1, 2, 3];
for (let value of arr) {
console.log(value); // 输出元素值:1, 2, 3
}
const str = "Hello";
for (let char of str) {
console.log(char); // 输出字符:H, e, l, l, o
}
```
总结:
- for...in 循环用于迭代对象的属性名,可以遍历对象的可枚举属性。
- for...of 循环用于迭代可迭代对象的元素值,可以遍历数组、字符串等可迭代对象。
希望这个解答对你有帮助!如果你还有其他问题,请随时提问。