在实际的开发过程当中,通常都会用到for循环,均可以用来遍历,可是这几个之间又存在细微的差异!javascript
一,传统的for循环;java
var arr = ['good', 'good', 'study']; for (var i = 0; i< arr.length; i++) { console.log(arr[i]); };
优势: 若是循环的次数比较多的时候,相较于其余的循环方法,运行的时间会更快;若是循环的次数比较少的时候,运行时间几乎差很少es6
缺点: 1,这种传统方法,没法只关注元素自己,还得维护变量i和以及边界length;数组
2, 当嵌套的循环不少层的时候,须要维护多个变量i,代码会变得很复杂浏览器
二,forEach;spa
var arr = ['good', 'good', 'study']; arr.forEach(item => { console.log(item); });
优势:不用维护变量i和边界length对象
缺点: 在循环的过程当中,若是有break或者continue的时候,会报错(只能一个循环走到底,不能中途退出循环)blog
三,for....inip
var arr = ['good', 'good', 'study']; for (var i in arr) { console.log(arr[i]); };
for..in 是一种精准的迭代语句,能够枚举对象的全部可枚举的属性,除了能够遍历数组,对象以外,还能够遍历字符串开发
优势:不须要维护变量i以及边界length,也支持break以及continue等操做
var father = { fatherArr: 'attr' }; var instance = Object.create(father); instance.a = 1; instance.b = 2; instance.c = 3; for (var i in instance) { console.log(instance[i]); };
1,2,3,attr
缺点:for..in语句除了能够枚举自身的属性以外,还能够遍历原型身上的属性,一样的,数组也存在这个问题,使用的时候须要添加obj.hasOwnProperty()属性的判断
四: for..of;
var attr = ['good', 'good', 'study']; for (var i of attr) { console.log(attr[i]); };
优势:不用维护变量i和边界length,可使用break,continue等操做,也不存在for..in的遍历原型的属性等问题
缺点:可是for..of是es6才提出来的,因此存在兼容性问题,若是须要兼容低版本浏览器的话,不建议使用;同时只能用户遍历可迭代的对象,不可迭代对象直接报错