for...in的改进版for...of

for...in 用起来似乎还不错,为什么又弄个 for...of 呢?

来看个例子:

'user strict'
var arr = [12,13,14,15,16];
for(var i in arr){
    console.log(i);
}
// 遍历结果为0 1 2 3 4(仅为数组下标)

 for...of 这里就体现出优势了

同样的例子将 for...in 换成 for...of 就可直接遍历数组元素的内容

'user strict'
var arr = [12,13,14,15,16];
for(var i of arr){
    console.log(i);
}
// 遍历结果为0 1 2 3 4(仅为数组下标)

遍历 Array 可以采用下标循环,遍历 Map 和 Set 就无法使用下标。为了统一集合类型,ES6标准引入了新的 iterable 类型,ArrayMap 和 Set 都属于 iterable 类型

for..of 则可专门针对 iterable 类型进行遍历

再看个比较典型的例子:

var arr = [12,13,14,15,16];
arr.attr = 'as';
for(var i in arr){
    console.log(arr[i]);
}
// 结果 12 13 14 15 16 as(for...in不仅遍历出arr数组的元素还把arr的属性也遍历出来)

这里使用 for...of 仅遍历数组元素

var arr = [12,13,14,15,16];
arr.attr = 'as';
for(var i of arr){
    console.log(i);
}
// 结果 12 13 14 15 16(不会出现 for...in 的情况)
原文地址:https://www.cnblogs.com/MirageFox/p/9767226.html