js中循环对比(for循环,foreach,for in,for of ,map)
对空位的处理
for循环(不会忽略空位,标记undefined)
var arr =[1,2,undefined,3,null,,7]
for (let i=0;i<arr.length;i++) {
console.log('for循环',arr[i])
}
结果:
for循环 1
for循环 2
for循环 undefined
for循环 3
for循环 null
for循环 undefined
for循环 7
for of(不会忽略空位,标记undefined)
for(let i of arr) {
console.log('for of',i)
}
结果:
for of 1
for of 2
for of undefined
for of 3
for of null
for of undefined
for of 7
for in(会忽略空位)
for(let i in arr) {
console.log('for in',arr[i])
}
结果:
for in 1
for in 2
for in undefined
for in 3
for in null
for in 7
forEach(会忽略空位)
arr.forEach(item => console.log('foreach',item))
结果:
foreach 1
foreach 2
foreach undefined
foreach 3
foreach null
foreach 7
map(会忽略空位),filter,every,some,find,findIndex都会忽略空位
arr.map(item => console.log('map',item))
结果:
map 1
map 2
map undefined
map 3
map null
map 7
性能对比
var arr =new Array(100000).fill(1)
console.time('for循环')
for (let i=0;i<arr.length;i++) {
}
console.timeEnd('for循环')
console.time('缓存优化的for循环')
for (let i=0,len=arr.length;i<len;i++) {
}
console.timeEnd('缓存优化的for循环')
console.time('foreach循环')
arr.forEach(item => {} )
console.timeEnd('foreach循环')
console.time('for of 循环')
for(let i of arr) {
}
console.timeEnd('for of 循环')
console.time('for in 循环')
for(let i in arr) {
}
console.timeEnd('for in 循环')
console.time('map循环')
arr.map(item => {})
console.timeEnd('map循环')
结果:
for循环: 3.226ms
缓存优化的for循环: 1.965ms
foreach循环: 2.144ms
for of 循环: 5.128ms
for in 循环: 11.501ms(最好不要用,可能会遍历原型链上的属性)
map循环: 13.134ms
注意lz在对数组的循环中没有做任何处理仅仅是空代码来比较性能,map循环直接返回空数组,在对数组进行浅拷贝上占用内存低,for of循环也对占用内存上进行了一定的优化,而for与for of可以随时中断循环与跳出循环。抛开业务场景和使用便利性,单纯谈性能和效率是没有意义的
ES6新增的诸多数组的方法确实极大的方便了前端开发,使得以往复杂或者冗长的代码,可以变得易读而且精炼,而好的for循环写法,在大数据量的情况下,确实也有着更好的兼容和多环境运行表现
js中循环对比(for循环,foreach,for in,for of ,map)的更多相关文章
- 一文搞懂 js 中的各种 for 循环的不同之处
一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...
- js中的分支与循环
一.js的分支结构 js的分支结构包括:if-else结构.多重if结构.嵌套if结构和switch-case结构 1.if-else结构 1.结构的写法: if(判断条件){ //条件为 ...
- js中奇特的for循环写法
//正常的for循环 for(var i=0;i<10;i++){ console.log(i); } //输出:1,2,3……10 //简写 for(var i=10;i--;){ conso ...
- JS中的for....in循环 和 for ...of循环以及iterable遍历Map和Set
for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来: var o = { name: 'Jack', age: 20, city: 'Beijing' }; for ...
- js中数组以及for循环的使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...
- js 中的for...in循环
in:其左边是一个字符串或可以转换成字符串,右边是一个对象或数组 例:var person={firstname:"Bob", lastname:"Kin"}; ...
- JS中的三种循环
三种循环1.while 2.do while 3.for 1.while: 语法结构:while(条件){代码块:改变条件} 步骤:1.初始化变量 2.判断条件 3.执行代码块 4.改变初始条 ...
- js中两种for循环的使用
针对两种for循环的使用 1. for in循环的使用环境 可用在字符串.数组.对象中, 需注意:其中遍历对象得到的是每个key 的value值 2. for 变量递加的方式 ...
- js 中的流程控制-循环(for)语句
for语句: <script> /* for(exp1;exp2;exp3){ 循环体; } exp1:无条件的执行第一个表达式 exp2:判断是否能执行循环体的条伯 exp3:做增量的操 ...
随机推荐
- 爬取页面InsecureRequestWarning: 警告解决笔记
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is s ...
- redis简介与持久化
一 . redis简介 redis属于NoSQL学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是key value形式 nosql有很多产品 ...
- DAY16、模块和包
一.模块 1.模块的加载顺序:内存 =>内置 =>sys.path(一系列自定义模块) 2.sys.path:环境变量,存放文件路径的列表 重点:默认列表第一个元素就是当前被执行文件所在的 ...
- Magento 架构原则
Magento架构原则 >OOP体系结构和编程原则OOP体系结构和编程原则面向对象编程(OOP)设计允许软件组件具有最大的灵活性和可扩展性,允许您设计和实现高度定制的网站.面向对象原则的优点包括 ...
- docker-跨主机存储
容器分类 从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态是指容器在运行过程中不需要保存数据,每次访问的结果不依赖上一次访问,比如提供静 ...
- BM算法学习笔记
一种nb算法,可以求出数列的递推式. 具体过程是这样的. 我们先假设它有一个递推式,然后按位去算他的值. ;j<now.size();++j)(delta[i]+=1ll*now[j]*f[i- ...
- Linux基本命令总结(九)
接上篇: 46,scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下 ...
- TypeScript体系调研报告
作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...
- selenium技术博客
1.java+selenium+详细的api说明和seleniumGrid使用,缺点是代码不够好看. http://www.cnblogs.com/yytesting/p/5714175.html
- xshell连接ubuntu系统
1.登录虚拟机 2.关闭本机所有防火墙和杀毒软件 sudo ufw status 查看防火墙状态 sudo ufw disable 关闭防火墙 sudo ufw enable 打开防火墙 3.安装ss ...