for循环比较

在实际的开发过程当中,通常都会用到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才提出来的,因此存在兼容性问题,若是须要兼容低版本浏览器的话,不建议使用;同时只能用户遍历可迭代的对象,不可迭代对象直接报错

相关文章
相关标签/搜索