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才提出來的,因此存在兼容性問題,若是須要兼容低版本瀏覽器的話,不建議使用;同時只能用戶遍歷可迭代的對象,不可迭代對象直接報錯

相關文章
相關標籤/搜索