JavaScript 各类遍历方式详解

   在$.each中想要终止循环,可是它没有continue或者break这样的终止方式,因此尝试使用return来进行终止,可是发现并无跳出循环。为了搞清楚js中关于各类遍历方式的不一样,经过查询进行了一下总结:html

 

为了方便例子讲解,现有数组和json对象以下:jquery

1 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular'];
2 var demoObj = {
3     aaa: 'Javascript',
4     bbb: 'Gulp',
5     ccc: 'CSS3',
6     ddd: 'Grunt',
7     eee: 'jQuery',
8     fff: 'angular'
9 };

 

for

平时使用最多的,直接看事例git

 1 (function() {
 2     for(var i=0, len=demoArr.length; i<len; i++) {
 3         if (i == 2) {
 4             // return;   // 函数执行被终止
 5             // break;    // 循环被终止
 6             continue; // 循环被跳过
 7         };
 8         console.log('demo1Arr['+ i +']:' + demo1Arr[i]);
 9     }
10 })();

关于for循环,有一下几点须要注意github

  • for循环中的i在循环结束以后任然存在与做用域中,为了不影响做用域中的其余变量,使用函数自执行的方式将其隔离起来()();
  • 避免使用for(var i=0; i<demoArr.length的方式,这样的数组长度每次都被计算,效率低于上面的方式。也能够将变量声明放在for的前面来执行,提升阅读性。

跳出循环的方式有以下几种chrome

  • return 函数执行被终止
  • break 循环被终止
  • continue 循环被跳过

  

for in

for(var item in arr|obj){} 能够用于遍历数组和对象json

  • 遍历数组时,item表示索引值, arr表示当前索引值对应的元素 arr[item]
  • 遍历对象时,item表示key值,arr表示key值对应的value值 obj[item]
 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仅仅只是终止循环,后面的代码会继续执行。

forEach

demoArr.forEach(function(arg) {})
参数arg表示数组每一项的元素,实例以下dom

具体有如下须要注意的地方函数

  • 回调函数中有2个参数,分别表示值和索引,这一点与jQuery中的$.each相反
  • 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指向newArr
4 }, newArr)

 

虽然在原生中forEach循环的局限性不少,可是了解他的必要性在于,不少第三方库会扩展他的方法,使其可以应用在不少地方,好比angular的工具方法中,也有forEach方法,其使用与原生的基本没有差异,只是没有了局限性,能够在IE下使用,也能够遍历对象工具

do/while

函数具体的实现方式以下,不过有一点值得注意的是,当使用continue时,若是你将i++放在了后面,那么i++的值将一直不会改变,最后陷入死循环。所以使用do/while必定要当心谨慎一点。

不建议使用do/while的方式来遍历数组

$.each

$.each(demoArr|demoObj, function(e, ele))
能够用来遍历数组和对象,其中e表示索引值或者key值,ele表示value值

输出为

这里有不少须要注意的地方

  • 使用return 或者return true为跳过一次循环,继续执行后面的循环
  • 使用return false为终止循环的执行,可是并不终止函数执行
  • 没法使用break与continue来跳过循环

 

$(selecter).each

专门用来遍历DOMList

  • i: 序列值 ele: 只当前被遍历的DOM元素
  • this 当前被遍历的DOM元素,不能调用jQuery方法
  • $(this) == $(ele) 当前被遍历元素的jquery对象,能够调用jquery的方法进行dom操做

使用for in 遍历DOMList

由于domList并不是数组,而是一个对象,只是由于其key值为0,1,2… 而感受与数组相似,可是直接遍历的结果以下

所以咱们在使用for in 遍历domList时,须要将domList转换为数组

 

  

  有三种能提高逼格的函数自执行的方式:()()!function() {}() +function() {}()

相关文章
相关标签/搜索