在实际的开发过程中,一般都会用到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. python小总结2(time,os)

    一.时间模块 1.1 Time time.time():获取时间戳,结果为一个浮点数 time.gtime():获取时间的元组形式 time.localtime():获取的是当地时间 time.mkt ...

  2. Quick Sort -- 快速排序算法

    //参数说明: // int data[] : 待排序的数据数组 // int m : 下限值 // int n : 上限值 void QuickSort ( int data[] , int m , ...

  3. 漫谈hashcode

    概要 对于hashcode,相信很多朋友都不陌生,应为我们很多时候都需要用到这个,比如hashMap中就用到了,根据key的hash值来决定value存放的位置,之后来取得时候直接到指定的位置上那就行 ...

  4. using Newtonsoft.Json;

    using Newtonsoft.Json;    //数组转义为json  string result = JsonConvert.SerializeObject(list1);   //josn转 ...

  5. 入门html第一次copy小米首页布局

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. TP自动提取关键词

    protected function _before_insert(&$data, $option) {        $data['create_time'] = time();       ...

  7. python列表的学习笔记

    列表的操作 第一个例子: #names = "zhangyang guyun xiangpeng xuliangchen"  #通过空格或逗号存变量 names = [" ...

  8. 修改hbuilder背景颜色为护眼模式

    复制以下代码,保存为.tmTheme文件导入HBuilder <?xml version="1.0" encoding="UTF-8"?> < ...

  9. OO第二单元的总结

    三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了.在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业.当然这次 ...

  10. L364 Should Your Resume Be One Page or Two?

    Should Your Resume Be One Page or Two? Conventional wisdom suggests that you should keep it short: A ...