迭代语句又叫循环语句,声明一组要反复执行的命令,直到满足某些条件为止。

循环通常用于迭代数组的值(因此而得名),或者执行重复的算术任务。

do-while, while, for, for-in

---------------------------------------------------------

do-while 语句

do-while 语句是后测试循环,即退出条件在执行循环内部的代码之后计算。这意味着在计算表达式之前,至少会执行循环主体一次。

它的语法如下:

do {statement} while (expression);

例子:

        var i = 0;
do {i += 2;} while (i < 10);
console.log(i) //

---------------------------------------------------------------------

while 语句

while 语句是前测试循环。这意味着退出条件是在执行循环内部的代码之前计算的。因此,循环主体可能根本不被执行。

它的语法如下:

while (expression) statement

例子:

        var i = 0;
while (i < 10) {
i += 2;
console.log(i) // 2 4 6 8 10
}

--------------------------------------------------------------

for 语句

for 语句是前测试循环,而且在进入循环之前,能够初始化变量,并定义循环后要执行的代码。

它的语法如下:

for (initialization; expression; post-loop-expression) statement

注意:post-loop-expression 之后不能写分号,否则无法运行。

例子:

iCount = 4;
for (var i = 0; i < iCount; i++) {
console.log(i); // 0 1 2 3
}

这段代码定义了初始值为 0 的变量 i。只有当条件表达式(i < iCount)的值为 true 时,才进入 for 循环,这样循环主体可能不被执行。如果执行了循环主体,那么将执行循环后表达式,并迭代变量 i。

---------------------------------------------

for-in 语句

for 语句是严格的迭代语句,用于枚举对象的属性。

它的语法如下:

for (property in expression) statement

例子:

for (sProp in window) {
alert(sProp);
}

这里,for-in 语句用于显示 window 对象的所有属性。

输出数组:

var arr = ['apple','pear','banana']
for ( i in arr) { // 千万别这样做
  console.log(i);    //0 1 2
  console.log(arr[i]); //apple pear banana
}

这绝对是一个糟糕的选择,为什么呢?

  • 在这段代码中,赋给index的值不是实际的数字,而是字符串“0”、“1”、“2”,此时很可能在无意之间进行字符串算数计算,例如:“2” + 1 == “21”,这给编码过程带来极大的不便。
  • 作用于数组的for-in循环体除了遍历数组元素外,还会遍历自定义属性。举个例子,如果你的数组中有一个可枚举属性myArray.name,循环将额外执行一次,遍历到名为“name”的索引。就连数组原型链上的属性都能被访问到。
  • 最让人震惊的是,在某些情况下,这段代码可能按照随机顺序遍历数组元素。
  • 简而言之,for-in是为普通对象设计的,你可以遍历得到字符串类型的键,因此不适用于数组遍历。

--------------------------------------------------------

强大的for-of循环

ES6不会破坏你已经写好的JS代码。目前看来,成千上万的Web网站依赖for-in循环,其中一些网站甚至将其用于数组遍历。如果想通过修正for-in循环增加数组遍历支持会让这一切变得更加混乱,因此,标准委员会在ES6中增加了一种新的循环语法来解决目前的问题。

就像这样:

        let arr = ['apple','pear','banana']
for (let aa of arr) {
  console.log(aa);   //apple pear banana
}

是的,与之前的内建方法相比,这种循环方式看起来是否有些眼熟?那好,我们将要探究一下for-of循环的外表下隐藏着哪些强大的功能。现在,只需记住:

  • 这是最简洁、最直接的遍历数组元素的语法
  • 这个方法避开了for-in循环的所有缺陷
  • 与forEach()不同的是,它可以正确响应break、continue和return语句

for-in循环用来遍历对象属性。

for-of循环用来遍历数据—例如数组中的值。

但是,不仅如此!

for-of循环也可以遍历其它的集合

for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。

for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:

for (var chr of "") {
alert(chr);
}

它同样支持Map和Set对象遍历。

ECMAScript迭代语句的更多相关文章

  1. C#迭代语句、跳转语句--C#基础

    1.foreach每执行一次内含的代码时,循环变量就会一次读取集合中的一个元素,不需要个数.循环变量只是一个只读的局部变量,这个值是不能修改的.char后的word是 foreach语句的迭代变量,它 ...

  2. C#流程控制语句--迭代语句(while,do....while, for , foreach)

    迭代语句:有的时候,可能需要多次执行同一块代码.函数中的第一个语句先执行,接着是第二个语句,依此类推. 迭代语句:while(先检查后执行) while(条件表达式 bool类型) { 代码语句 } ...

  3. CoreJava(一)—— Java迭代语句

    本文介绍一些关于迭代语句的一些相关技巧以及Java8中的迭代语句的使用方法. public class TestBreak { public static void main(String[] arg ...

  4. c# 第13节 迭代语句、while、do...while、for、foreach、goto

    本节内容: 1:迭代语句是什么 2:迭代语句之while 3:迭代语句之 do...while 4:迭代语句之for 5:迭代语句之foreach: 6:跳转语句break.continue.retu ...

  5. ISO/IEC 9899:2011 条款6.8.5——迭代语句

    6.8.5 迭代语句 语法 1.iteration-statement: while    (    expression    )    statement do    statement    w ...

  6. C#迭代语句

    1,do while语句 do语句重复执行语句或者语句块,直到指定的表达式为false为止.循环体如果为单个语句,可以不放在{}内,如果不是,那么必须放在{}内.如下面的代码 Codeint i=0; ...

  7. JavaScript学习笔记(高级部分—01)

    JavaScript的核心ECMAScript描述了该语言的语法和基本对象:DOM描述了处理网页内容的方法和接口:BOM描述了与浏览器进行交互的方法和接口. 简单说,ECMAScript描述了以下内容 ...

  8. JavaScript(ECMAScript) with 语句

    有同事,爱尝鲜,JavaScript ECMAScript with 语句,找了半天不知道局部变量的出处,原来是with语句搞得鬼. http://www.w3school.com.cn/js/pro ...

  9. JS高程3.基本概念(5)语句

    1.if语句 2.do-while语句:后测循环语句,循环体内的代码至少执行一次. 3.while语句:前测循环语句. 4.for语句:前测循环语句. 注意:在ECMAScript中不存在块级作用域, ...

随机推荐

  1. css常用居中

    对一个已知大小的元素上下左右居中(已知大小了,直接margin也就行了): css如下:.parent{height:100px;width:100px;background:grey;positio ...

  2. java 8 Hashmap深入解析 —— put get 方法源码

    每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计. 对于普通的程序员,可能仅仅能说出Ha ...

  3. 在SrollView中嵌套GridView或ListView(转)

    原文链接:http://blog.csdn.net/gaojinshan/article/details/17055511 我想在同一个界面中,使用两个GridView,两个GridView一起上下滚 ...

  4. 第1课 - 学习Lua的意义

    学习Lua的意义 1.Lua简介             (1) 1993年.巴西 (2) 小巧精致的脚本语言,大小只有200K (3) 用标准C语言写成,能够在所有的平台上编译运行 (4) 发明的目 ...

  5. MCDownloader(iOS下载器)说明书

    示例 前言 很多iOS应用中都需要下载数据,并对这些下载的过程和结果进行管理,因此我才有了写这个MCDownloader的想法.在IOS 文件下载器-MCDownloadManager这篇文章中,我使 ...

  6. BZOJ2157 旅行 模拟

    题目内容: Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条 ...

  7. c#FTP操作类,包含上传,下载,删除,获取FTP文件列表文件夹等Hhelp类

    有些时间没发表文章了,之前用到过,这是我总结出来关于ftp相关操作一些方法,网上也有很多,但是没有那么全面,我的这些仅供参考和借鉴,希望能够帮助到大家,代码和相关引用我都复制粘贴出来了,希望大家喜欢 ...

  8. POI框架实现创建Excel表、添加数据、读取数据

    public class TestPOI2Excel {//创建2003版本Excel用此方法 @Test public void testWrite03Excel() throws Exceptio ...

  9. 自然梯度(Natural Gradient)

    自然梯度(Natural Gradient)

  10. 小结:Swift、OC语言中多target在代码中如何区分

    一.对swift工程 经实践,网上的方法都无法成功,后来思考DEBUG宏定义方式,经实测有效,方式如下: 注意:不能把swift flags 小三角折叠后双击设置-DTarget4AppStore, ...