for in
- for in遍历的是索引,索引是字符串型的数字,因而不能直接进行几何运算。
- 遍历顺序可能不是实际的内部顺序。
- for in会遍历数组所有的可枚举属性,包括原型方法和属性。
- for in可以遍历普通对象
var arr = [1, 2, 4, 5, 7];
arr.name = "数组";
for (var index in arr) {
console.log(index);//0,1, 2, 4,name
console.log(arr[index]);//1, 2, 4, 5, 7,数组
}
for of
- for-of遍历的只是数组内的元素,而不包括数组的原型方法和属性。
- for in不可以遍历普通对象,会报错
var myArray = [1, 2, 4, 5, 6, 7];
myArray.name = "数组";
for (var value of myArray) {
console.log(value);//1, 2, 4, 5, 6, 7
}
对比
对比项 | for in | for of |
---|---|---|
常用环境 | 遍历对象 | 遍历数组 |
遍历对象 | 可遍历普通对象 | 不可遍历普通对象 |
es版本 | es5 | es6 |
原型 | 会数组的原型方法和属性 | 不会数组的原型方法和属性 |
遍历项 | 遍历索引(即键名) | 遍历数组元素值 |
set和map | 不可遍历set和map | 可以遍历set和map |