一、for循环
1 (function() { 2 for(var i=0, len=demoArr.length; i
⚠️:关于for循环,有以下几点需要注意
- for循环中的
i
在循环结束之后任然存在与作用域中,为了避免影响作用域中的其他变量,使用函数自执行的方式将其隔离起来()()
;或者也可以使用let声明i。 - 避免使用
for(var i=0; i<demoArr.length
的方式,这样的数组长度每次都被计算,效率低于上面的方式。
也可以将变量声明放在for的前面来执行,提高阅读性。
二、for-in
- 遍历数组时,i表示索引值, arr表示当前索引值对应的元素 arr[i]
- 遍历对象时,i表示key值,arr表示key值对应的value值 obj[i]
1 (function() { 2 for(var i in demoArr) { 3 if (i == 2) { 4 return; // 函数执行被终止 5 // break; // 循环被终止 6 // continue; // 循环被跳过 7 }; 8 console.log('demoArr['+ i +']:' + demoArr[i]); 9 }10 console.log('-------------');11 })();
⚠️:关于for-in循环,有以下几点需要注意
- 在for循环与for in循环中,
i
值都会在循环结束之后保留下来。因此使用函数自执行的方式避免。 - 使用return,break,continue跳出循环都与for循环一致,不过关于return需要注意,⚠️在函数体中,return表示函数执行终止,就算是循环外面的代码,也不再继续往下执行。而break仅仅只是终止循环,后面的代码会继续执行。
1 function res() { 2 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; 3 4 for(var item in demoArr) { 5 if (item == 2) { 6 return; 7 }; 8 console.log(item, demoArr[item]); 9 }10 console.log('desc', 'function res'); //不会执行11 }
三、for-of(需要es6支持)
for(let value of arr) { });
四、forEach(func)
demoArr.forEach(function(arg) {})
1 demoArr.forEach(function(val, index) {2 if (val == 'CSS3') {3 return; // 循环被跳过4 // break; // 报错5 // continue;// 报错6 };7 console.log(val, index);8 })
⚠️:具体有以下需要注意的地方
- 回调函数中有2个参数,分别表示值和索引,这一点与jQuery中的$.each相反
-
1 $.each(demoArr, function(i, ele) {2 console.log(i, ele);3 })
- forEach无法遍历对象
- forEach无法在IE中使用,firefox和chrome实现了该方法
- forEach无法使用break,continue跳出循环,使用return时,效果和在for循环中使用continue一致
- 最重要的一点,可以添加第二参数,为一个数组,而且回调函数中的this会指向这个数组。而如果没有第二参数,则this会指向window。
1 var newArr = [];2 demoArr.forEach(function(val, index) {3 this.push(val); // 这里的this指向newArr4 }, newArr)
五、arr.map(function(n){ });
arr.map(function(n){ });
六、性能对比