在实际的开发过程中,一般都会用到for循环,都可以用来遍历,但是这几个之间又存在细微的差别!

一,传统的for循环;

var arr = ['good', 'good', 'study'];
for (var i = 0; i< arr.length; i++) {
console.log(arr[i]);
};

优点: 如果循环的次数比较多的时候,相较于其他的循环方法,运行的时间会更快;如果循环的次数比较少的时候,运行时间几乎差不多

缺点: 1,这种传统方法,无法只关注元素本身,还得维护变量i和以及边界length;

    2,  当嵌套的循环很多层的时候,需要维护多个变量i,代码会变得很复杂

二,forEach;

var arr = ['good', 'good', 'study'];
arr.forEach(item => {
console.log(item);
});

优点:不用维护变量i和边界length

缺点: 在循环的过程中,如果有break或者continue的时候,会报错(只能一个循环走到底,不能中途退出循环)

三,for....in

var arr = ['good', 'good', 'study'];
for (var i in arr) {
console.log(arr[i]);
};

for..in 是一种精准的迭代语句,可以枚举对象的所有可枚举的属性,除了可以遍历数组,对象之外,还可以遍历字符串

优点:不需要维护变量i以及边界length,也支持break以及continue等操作

var father = {
fatherArr: 'attr'
};
var instance = Object.create(father);
instance.a = 1;
instance.b = 2;
instance.c = 3;
for (var i in instance) {
console.log(instance[i]);
};
1,2,3,attr

缺点:for..in语句除了可以枚举自身的属性之外,还可以遍历原型身上的属性,同样的,数组也存在这个问题,使用的时候需要添加obj.hasOwnProperty()属性的判断

四: for..of;

var attr = ['good', 'good', 'study'];
for (var i of attr) {
console.log(attr[i]);
};

优点:不用维护变量i和边界length,可以使用break,continue等操作,也不存在for..in的遍历原型的属性等问题

缺点:但是for..of是es6才提出来的,所以存在兼容性问题,如果需要兼容低版本浏览器的话,不建议使用;同时只能用户遍历可迭代的对象,不可迭代对象直接报错

for循环比较的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. Windows 2008 安装Sql server 2005

    Windows 2008 安装Sql server 2005 进入下载的文件中,双击打开:splash.hta 文件进行安装 根据自己的系统来选择性进行安装,这里我们选择第二项:基于 x64 的操作系 ...

  2. jQuery获取name相同被选中的多选框的值

    var name= "";            $("input:checkbox[name='AllElection']:checked").each(fu ...

  3. [转载]关于laravel中表关系的一对一、一对多、多对一、多对多实践

    这是转载的文章 出处:https://blog.csdn.net/weixin_38112233/article/details/79220535 作者:重新遇到 一.建表和插入测试数据 1.用户表建 ...

  4. Laravel 1071 Specified key was too long

    出现错误 SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key len ...

  5. while循环与 for循环

    import turtle turtle.setup(600,400,0,0) turtle.bgcolor('red') turtle.color('yellow') turtle.fillcolo ...

  6. 最近工作再弄基于bootstrap的定制sass

    封装各种组件如 button table 当然..我只才做完两个. 比如table 抽出很多类以后可以配置的值 还有button 目录结构大致是 scss主要css文件 base和components ...

  7. spring-boot整合mybatis(web mysql logback配置)

    pom.xml相关的配置说明. 配置文件看着比价多,在创建spring-boot项目的时候,自需要添加web,mysql,mybatis三个选项即可 <?xml version="1. ...

  8. python logging模块使用流程

    #!/usr/local/bin/python # -*- coding:utf-8 -*- import logging logging.debug('debug message') logging ...

  9. JSP学习(1)---JSP基本原理

    一.JSP的本质 其本质是Servlet,web应用中的每个jsp页面都会由servlet容器生成对应的servlet. 在tomcat中,jsp生成的servlet在work文件夹下: 原jsp文件 ...

  10. docker学习构建镜像---第三章节

    一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...