for in 和 for of区别
-
for in 是ES5标准
-
可以遍历数组和对象
-
遍历的索引是
字符串类型- 因为通常遍历的时候,要对索引进行算术操作,如果是字符串还需要转换成数值类型,不太方便
-
遍历顺序可能不是按照数组顺序的(
随机顺序) -
使用for in会遍历出数组/对象所有的可枚举属性,包括原型
for in 更适合遍历对象,不要用 for in 遍历数组
-
-
for of是ES6标准
-
for of 可以简单正确的遍历数组(不遍历原型)
-
不能遍历对象 -
因为能够被for...of正常遍历的,都需要实现一个迭代器Iterator。而数组、字符串、Set、Map结构,早就内置好了Iterator(迭代器),它们的原型中都有一个Symbol.iterator方法,而Object对象并没有实现这个接口,使得它无法被for...of遍历
-
Map
-
Set
-
String
-
Array
-
Arguments
-
判断是否有迭代能力
Array.prototype.hasOwnProperty(SYmbol.iterator)
-
-
总结
- for in可以遍历数组和对象,for of不能遍历对象
- for...in 不仅遍历出数字键名,还会手动遍历其它的键,甚至包括原型链上的键
- for..in遍历的索引为字符串类型
for..of可以响应break,continue和return语句