ECMAScript 6已经逐渐普及,经过二十多年的改进,很多功能也有了更成熟的语句,比如 for 循环

这篇博客将介绍一下从最初的 for 循环,到 ES6 的 for-of 等四种遍历方法

先定义一个数组:

const myArray = [1, 5, 9];
myArray.name = 'wise'

在控制台中打印这个数组,会看到这个数组的全貌:

一、 for

相信大部分开发工作者,最初遍历数组的方法都是使用 for 循环:

for ( let i = 0; i < myArray.length; i++ ) {
console.log(myArray[i]);
}

作为初代循环语句,for 语句仅仅解决了遍历这一功能,但冗长的代码还是显得过于笨重

二、 for-in

相比 for 语句,for-in 就轻巧得多,但是 for-in 通常用来遍历对象,如果遍历数组的话...

for ( let key in myArray ) {
console.log(key);
}

直接遍历的话,会打印数组的 index,而 index 是 string 类型

如果编程的时候不注意,很可能在无意中进行了字符串的计算: "1"+"1"="11"

所以使用 for-in 遍历数组的正确姿势应该是:

for ( let key in myArray) {
console.log(myArray[key]);
}

和 for 循环不同,for-in 语句还将自定义属性 "name" 的值 "wise" 打印了出来

所以用 for-in 遍历数组这种事,还是别在开发的时候干了

三、 forEach

ES5 发布之后,js 新增了内建方法 forEach,这确实是一个遍历数组的好方法:

myArray.forEach(function (value) {
console.log(value);
});

但是 forEach 的本质还是一个方法,并不是语句

所以它并不能响应 break 和 continue 语句

四、 for-of

仔细分析一下上面三种方法,如果仅限于遍历数组的话,似乎最初的 for 语句反而最合适

直到 ES6 横空出世,新的循环语句 for-of 开始崭露头角

for ( let key of myArray ) {
console.log(key);
}

没错,for-of 就是最直接最清爽的遍历数组的办法

如果用一句话概括 for-in 与 for-of 的区别的话,那就是:

for-in 循环用来遍历对象属性,for-of 循环用来遍历数据

五、 for-of 不仅如此

作为一个 ES6 新增的语句,for-of 和其他 ES6 语法的结合,才是它的强大之处

遍历 Set 类型:

const mySet = new Set('wwiissee');

for ( let value of mySet ) {
console.log(value);
}

遍历 Map 类型:

const myMap = new Map([
['name', 'wise'],
['info', 'wrong'],
['home', 'cnblogs']
]); for ( let [key, value] of myMap ) {
console.log(key + ' is ' + value);
}

【JavaScript 】for 循环进化史的更多相关文章

  1. javascript之循环保存数值

    javascript之循环保存数值 语言都是相通的,这句话在我学javascript时有的深刻的意识.js中的for循环与java中的for循环有很大相似之处. 先看下面这段代码 for(var i= ...

  2. JavaScript的循环语句

    JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...

  3. JavaScript while 循环

    JavaScript while 循环的目的是为了反复执行语句或代码块. 只要指定条件为 true,循环就可以一直执行代码块. while 循环 while 循环会在指定条件为真时循环执行代码块. 语 ...

  4. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  5. JavaScript for循环实现表格隔行变色

    本代码主要演示的是for循环, <!doctype html> <html lang="en"> <head> <meta charset ...

  6. JavaScript数组循环

    JavaScript数组循环 一.前言 利用Javascript map(),reduce()和filter()数组方法可以遍历数组.而不是积累起来for循环和嵌套来处理列表和集合中的数据,利用这些方 ...

  7. 一篇文章图文并茂地带你轻松学完 JavaScript 事件循环机制(event loop)

    JavaScript 事件循环机制 (event loop) 本篇文章已经默认你有了基础的 ES6 和 javascript语法 知识. 本篇文章比较细致,如果已经对同步异步,单线程等概念比较熟悉的读 ...

  8. JavaScript 事件循环

    JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...

  9. javascript for循环

    2016年12月28日 20:01:54 星期三 html: <a href="aaaa">AAAA</a> <a href="bbbb&q ...

随机推荐

  1. PHP 八种基本的数据类型小结

    四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: array (数组) object (对 ...

  2. 【NOIP2012提高组】借教室

    90分暴力解法: 用线段树,初始值为该天的教室数,每个人来申请的时候在这段区间减去借走的数,然后查询最小值是否小于0,是就输出-1,否则继续. (其实在vijos是可以直接A的,他们的评测机太快了) ...

  3. Mybatis框架解析之Builder解析

    首先我们从builder这个类入手,首先我们注意到BaseBuilder,其实它的本质上市一个抽象类,它从本质上抽象出了Builder的一切,我猜想这里一定使用了建造者模式,但是这个抽象类里面居然没有 ...

  4. Java VS .NET:Java与.NET的特点对比

    一.前言 为什么要写Java跟.NET对比? .NET出生之后就带着Java的影子.从模仿到创新,.NET平台也越来越成熟.他们不同的支持者也经常因为孰弱孰强的问题争论不休.但是本文并不是为了一分高下 ...

  5. 【DevOps】团队敏捷开发系列--开山篇

    随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发-测试-发布)模式已经不能满足快速交付的需求.2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建.测 ...

  6. 初识homebrew

    homebrew是MAC上的一个包管理工具,用于软件安装,非常方便. homebrew安装: 命令行执行: ruby -e "$(curl -fsSL https://raw.githubu ...

  7. 自学Python4.2 迭代器、生成器

    迭代器.生成器一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么, 因为人们很少在迭代途中往后退.另外 ...

  8. 自学Python1.2-环境的搭建:Pycharm及python安装详细教程

    Python几乎可以在任何平台下运行,如我们所熟悉的:Windows/Unix/Linux/Macintosh 一.windows下安装Python 1. 从python官方网站:http://www ...

  9. python filter map reduce

    filter(function, iterable): Construct a list from those elements of iterable for which function retu ...

  10. 【JS】第一个js示例

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