循环结构的执行步骤:
1、声明循环变量;
2、判断循环条件;
3、 执行循环体操作 ;
4、 更新循环变量;
5、 然后循环 2-4,
while循环( )中的表达式,运算结果可以是各种类型,但是最终都会转为真假,转换规则如下
boolean true为真 false为假
String 空为假 ,非空为真
Number 0为假 ,非0为真
Object 存在为真,undefined为假
do{
...
}while
while循环特点:先判断后执行
do-while循环特点:先执行再判断,即使初始条件不成立,do-while循环至少执行一次
for循环
1、for有三个表达式:
声明循环变量
判断循环条件
更新循环变量
2 、for循环的执行特点:先判断再执行,与while相同
3、for循环三个表达式可以由多个部分构成,第二部分多个判断条件用&& ||连接,第三部分用逗号分隔
for in循环
// 声明一个Peson类 function Person(){ this.name = "张三"; this.age = 14; this.func1 = function(){ } } //实例化这个类 var zhangsan = new Person(); // 使用for-in遍历这个对象
// key 表示obj对象的每一个键值对的键!! 所有循环中,需要使用obj[keys]来取到每一个值
// for-in 循环,遍历时不仅能读取对象自身上面的成员属性,也能延续原型链遍历出对象的原型属性
// 所以,可以使用hasOwnProperty判断一个属性是不是对象自身上的属性。
// obj.hasOwnProperty(keys)==true 表示这个属性是对象的成员属性,而不是原先属性
for(keys in zhangsan){ console.log(zhangsan[keys]) }
JavaScript 原有的for...in循环,只能获得对象的键名,不能直接获取键值。ES6 提供for...of循环,允许遍历获得键值。
数组
var arr = ['a', 'b', 'c', 'd']; for (let a in arr) { console.log(a); // 0 1 2 3 } for (let a of arr) { console.log(a); // a b c d }
上面代码表明,for...in循环读取键名,for...of循环读取键值。如果要通过for...of循环,获取数组的索引,可以借助数组实例的entries方法和keys方法
Set 和 Map 结构
var engines = new Set(["Gecko", "Trident", "Webkit", "Webkit"]); for (var e of engines) { console.log(e); } // Gecko Trident Webkit var es6 = new Map(); es6.set("edition", 6); es6.set("committee", "TC39"); es6.set("standard", "ECMA-262"); for (var [name, value] of es6) { console.log(name + ": " + value); } // edition: 6 // committee: TC39 // standard: ECMA-262
上面代码演示了如何遍历 Set 结构和 Map 结构。值得注意的地方有两个,首先,遍历的顺序是按照各个成员被添加进数据结构的顺序。其次,Set 结构遍历时,返回的是一个值,而 Map 结构遍历时,返回的是一个数组,该数组的两个成员分别为当前 Map 成员的键名和键值。