对空位的处理

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)的更多相关文章

  1. 一文搞懂 js 中的各种 for 循环的不同之处

    一文搞懂 js 中的各种 for 循环的不同之处 See the Pen for...in vs for...of by xgqfrms (@xgqfrms) on CodePen. for &quo ...

  2. js中的分支与循环

    一.js的分支结构 js的分支结构包括:if-else结构.多重if结构.嵌套if结构和switch-case结构 1.if-else结构 1.结构的写法:    if(判断条件){    //条件为 ...

  3. js中奇特的for循环写法

    //正常的for循环 for(var i=0;i<10;i++){ console.log(i); } //输出:1,2,3……10 //简写 for(var i=10;i--;){ conso ...

  4. JS中的for....in循环 和 for ...of循环以及iterable遍历Map和Set

    for循环的一个变体是for ... in循环,它可以把一个对象的所有属性依次循环出来: var o = { name: 'Jack', age: 20, city: 'Beijing' }; for ...

  5. js中数组以及for循环的使用

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  6. js 中的for...in循环

    in:其左边是一个字符串或可以转换成字符串,右边是一个对象或数组 例:var person={firstname:"Bob", lastname:"Kin"}; ...

  7. JS中的三种循环

    三种循环1.while 2.do while 3.for 1.while: 语法结构:while(条件){代码块:改变条件} 步骤:1.初始化变量   2.判断条件  3.执行代码块  4.改变初始条 ...

  8. js中两种for循环的使用

    针对两种for循环的使用 1. for in循环的使用环境     可用在字符串.数组.对象中, 需注意:其中遍历对象得到的是每个key  的value值  2. for 变量递加的方式        ...

  9. js 中的流程控制-循环(for)语句

    for语句: <script> /* for(exp1;exp2;exp3){ 循环体; } exp1:无条件的执行第一个表达式 exp2:判断是否能执行循环体的条伯 exp3:做增量的操 ...

随机推荐

  1. PS制作黑暗墙面上的漂亮霓虹文字

    一.用ps软件打开砖墙背景素材. 二.复制一层,混合模式改为“正片叠底”,不透明度50%. 三.新建色相/饱和度调整图层,设置如下.打造夜间的气氛. 四.新建一个空白图层,设置前景色黑色.背景色白色, ...

  2. Java多线程-线程池ThreadPoolExecutor构造方法和规则

    为什么用线程池 原文地址 http://blog.csdn.net/qq_25806863/article/details/71126867 有时候,系统需要处理非常多的执行时间很短的请求,如果每一个 ...

  3. 转 spring注解式参数校验

    转自: https://blog.csdn.net/jinzhencs/article/details/51682830 转自: https://blog.csdn.net/zalan01408980 ...

  4. js 实现数据结构 -- 栈

    原文: 在 Javascript 中学习数据结构与算法. 概念: 栈是一种遵从先进后出 (LIFO) 原则的有序集合:新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底.在栈里,新元素都靠 ...

  5. linux 安装所有软件可以使用这个网站搜索RPM包

    #很方便很实用  强烈推荐 https://pkgs.org/

  6. 【XSY3156】简单计数II 容斥 DP

    题目大意 定义一个序列的权值为:把所有相邻的相同的数合并为一个集合后,所有集合的大小的乘积. 特别的,第一个数和最后一个数是相邻的. 现在你有 \(n\) 种数,第 \(i\) 种有 \(c_i\) ...

  7. Magento 2 安装数据表

    Magento 2 安装数据表 第1步:安装脚本 首先,我们将为CRUD模型创建数据库表.为此,我们需要插入安装文件 app/code/Mageplaza/HelloWorld/Setup/Insta ...

  8. 第四十篇-private,public,protected的区别

    1.public: public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private: private表示私有,私有的意思就是除了class自己之外,任何人都不可 ...

  9. SP687 REPEATS - Repeats

    给定字符串,求重复次数最多的连续重复子串. 题目很简单,被细节坑惨了... 前置的一个推论:请看这里. #include <bits/stdc++.h> using namespace s ...

  10. SQL Server数据库的备份和还

    转:http://blog.csdn.net/zwj7612356/article/details/8188025 在sql server数据库中,备份和还原都只能在服务器上进行,备份的数据文件在服务 ...