JavaScript 各种遍历方式详解及总结
JavaScript 各种遍历方式详解
在$.each中想要终止循环,但是它没有continue或者break这样的终止方式,所以尝试使用return来进行终止,但是发现并没有跳出循环。为了搞清楚js中关于各种遍历方式的不同,通过查询进行了一下总结:
为了方便例子讲解,现有数组和json对象如下:
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
平时使用最多的,直接看事例
(function() {
for(var i=, len=demoArr.length; i<len; i++) {
if (i == ) {
// return; // 函数执行被终止
// break; // 循环被终止
continue; // 循环被跳过
};
console.log('demo1Arr['+ i +']:' + demo1Arr[i]);
}
})();
关于for循环,有一下几点需要注意
- for循环中的
i在循环结束之后任然存在与作用域中,为了避免影响作用域中的其他变量,使用函数自执行的方式将其隔离起来()(); - 避免使用
for(var i=0; i<demoArr.length的方式,这样的数组长度每次都被计算,效率低于上面的方式。也可以将变量声明放在for的前面来执行,提高阅读性。
跳出循环的方式有如下几种
- return 函数执行被终止
- break 循环被终止
- continue 循环被跳过
for in
for(var item in arr|obj){} 可以用于遍历数组和对象
- 遍历数组时,item表示索引值, arr表示当前索引值对应的元素 arr[item]
- 遍历对象时,item表示key值,arr表示key值对应的value值 obj[item]
(function() {
for(var i in demoArr) {
if (i == 2) {
return; // 函数执行被终止
// break; // 循环被终止
// continue; // 循环被跳过
};
console.log('demoArr['+ i +']:' + demoArr[i]);
}
console.log('-------------');
})();
- 在for循环与for in循环中,
i值都会在循环结束之后保留下来。因此使用函数自执行的方式避免。 - 使用return,break,continue跳出循环都与for循环一致,不过关于return需要注意,在函数体中,return表示函数执行终止,就算是循环外面的代码,也不再继续往下执行。而break仅仅只是终止循环,后面的代码会继续执行。
forEach
demoArr.forEach(function(val, index) {
if (e == 'CSS3') {
return; // 循环被跳过
// break; // 报错
// continue;// 报错
};
console.log(val, index);
})
- 回调函数中有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一定要小心谨慎一点。
// 直接使用while
(function() {
var i = 0,
len = demoArr.length;
while(i < len) {
if (i == 2) {
// return; // 函数执行被终止
// break; // 循环被终止
// continue; // 循环将被跳过,因为后边的代码无法执行,i的值没有改变,因此循环会一直卡在这里,慎用!!
};
console.log('demoArr['+ i +']:' + demoArr[i]);
i ++;
}
console.log('------------------------');
})(); // do while
(function() {
var i = 0,
len = demo3Arr.length;
do {
if (i == 2) {
break; // 循环被终止
};
console.log('demo2Arr['+ i +']:' + demo3Arr[i]);
i++;
} while(i<len);
})();
$.each
$.each(demoArr|demoObj, function(e, ele))
可以用来遍历数组和对象,其中e表示索引值或者key值,ele表示value值
1 $.each(demoArr, function(e, ele) {
2 console.log(e, ele);
3 })
"Javascript"
"Gulp"
"CSS3"
"Grunt"
"jQuery"
"angular"
这里有很多需要注意的地方
- 使用
return或者return true为跳过一次循环,继续执行后面的循环 - 使用
return false为终止循环的执行,但是并不终止函数执行 - 无法使用break与continue来跳过循环
有三种能提升逼格的函数自执行的方式:()(), !function() {}() +function() {}()
原文地址: https://www.cnblogs.com/hbujt/p/5559482.html
JavaScript 各种遍历方式详解及总结的更多相关文章
- JavaScript 各种遍历方式详解,有你不知道的黑科技
http://segmentfault.com/a/1190000003968126 为了方便例子讲解,现有数组和json对象如下 var demoArr = ['Javascript', 'Gulp ...
- JavaScript 各种遍历方式详解
为了方便例子讲解,现有数组和json对象如下 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; v ...
- JavaScript各种遍历方式详解
为了方便例子讲解,现有数组和json对象如下 var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; v ...
- JavaScript遍历方式详解
为了方便例子讲解,现有数组和json对象如下: var demoArr = ['Javascript', 'Gulp', 'CSS3', 'Grunt', 'jQuery', 'angular']; ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...
- Javascript 异步加载详解
Javascript 异步加载详解 本文总结一下浏览器在 javascript 的加载方式. 关键词:异步加载(async loading),延迟加载(lazy loading),延迟执行(lazy ...
- 【JavaScript中的this详解】
前言 this用法说难不难,有时候函数调用时,往往会搞不清楚this指向谁?那么,关于this的用法,你知道多少呢? 下面我来给大家整理一下关于this的详细分析,希望对大家有所帮助! this指向的 ...
- JSON取值(key是中文或者数字)方式详解
JSON取值(key是中文或者数字)方式详解 先准备一个json对象用于演示 var json = {'name':'zhangsan', '年龄':23, 404:'你可能迷路了'}; 使用JS中w ...
随机推荐
- WebAuthorize(中间件对所有请求进行拦截)core只有通过添加中间件过滤请求方式 而非继承然后写特性的那种方式
一.WebAuthorize 1.项目名称 WebAuthorize 2.加个中间件 过滤请求. using Microsoft.AspNetCore.Builder; using Microsoft ...
- tuple写法
name = ("wen") 类型为strname = ("wen",) 类型为tuple
- Django的下载和基本指令
1.下载Django pip3 install django #不写版本号的话,默认使下载最新版的django pip3 install django == 2.1.2 #指定 ...
- [BZOJ] 地精部落
问题描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H 可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中 Hi ...
- java File过滤文件的多种方法
package com.qf.part1; import java.io.File; import java.io.FileFilter; import java.io.IOException; pu ...
- ECS 按量付费转包年包月支持按周啦
功能场景 不需要别的理由,就是省钱. 以 华北1 ecs.t5-c1m2.xlarge ( 4vCPU 8GB ) 为例:按量付费一周需要 131元,而按周付费只需要 68元. 如果您正在使用按量付费 ...
- linux常用基本命令 grep awk 待优化
查看centos操作系统版本:cat /etc/centos-release 切换到当前用户主目录:cd 或者cd ~ 创建文件夹/a/b/c:mkdir -pv /a/b/c.如果/a/b/c的父目 ...
- 20180711-Java Number类
下面是一个装箱与拆箱的例子: public class Test{ public static void main(String args[]){ Integer x = 5; // boxes in ...
- 解决webpack打包vue项目后,部署完成后,刷新页面页面404
1.url不动式url完全不动,即你的页面怎么改变,怎么跳转url都不会改变.这种情况的原理 就是纯ajax拿到页面后替换原页面中的元素,刷新页面就是首页 2.带hash(#)式这种相对于第一种的话刷 ...
- Oracle中动态SQL详解(EXECUTE IMMEDIATE)
Oracle中动态SQL详解(EXECUTE IMMEDIATE) 2017年05月02日 18:35:48 悠悠倾我心 阅读数:744 标签: oracle动态sqloracle 更多 个人分类: ...