简介
for…in ,是在ES5中提出的,用于遍历对象中所有的键值;for…of则是ES6中提出,是可以遍历所有数据结构的统一方法。
for…in
for-in 语句是一种精准迭代的语句,可以用于枚举对象中的属性。
主要的缺点:
- 在对数组进行遍历时,数组的键名是数字,但在for-in语句中是以字符串作为键值的,如‘0’、‘1’、‘2’.
- for-in会遍历对象中的所有键值,如在数组中手动添加的其他键值。
- 对于for-in 中遍历的顺序是不一定的。
总之对于for-in 语句来说,最好是用来遍历对象,而不是数组。
for…of
一个数据结构只要部署了Symbol.iterator 属性,就被视为具有iterator接口,就可以通过for-of遍历它的成员。原生具有Iterator接口的数据类型如下
- Array
- Map
- Set
- String
- TypeArray
- 函数中的argument对象
- NodeList对象
数组
数组原生就具备iterator接口,可以直接使用for-of语句。
var arr = ['a','b','c'];
for(let a of arr){
console.log(a); // a b c
}
for(let a in arr){
console.log(a)