javascript中流程控制语句
一.if语句
1、if (条件表达式) 语句
if (box > 50) console.log('box大于50');//一行的if语句,判断后执行一条语句
if (box < 50) { console.log('box大于50'); console.log('只有if条件为ture才会执行'); }
2、if (条件表达式){语句;}else{语句;}
3、if (条件表达式){语句;}else if (条件表达式){语句;} ... else{语句;}
二、switch语句:是多重条件判断,用于多个值相等的比较
switch (box){ case 1 : console.log('one'); break; case 2 : console.log('two'); break; default : console.log('error'); }
三、do...while语句:是一种先运行,后判断的循环语句。也就是说,不管条件是否满足,至少先运行一次循环体
do {alert(box); box++;} while (box <= 5);
四、while语句:是一种先判断,后运行的循环语句。也就是说,必须满足条件了之后,方可运行循环体
while (box <= 5) {alert(box);box++;}
五、for语句:也是一种先判断,后运行的循环语句。但它具有在执行循环之前初始变量和定义循环后要执行代码的能力
for (var box = 1; box <= 5 ; box++) {alert(box);}
六、for...in语句:迭代一个对象的除Symbol以外的属性名,包括继承的属性
遍历一个数组时,获取的是索引值,并且会将索引值转化为字符串
var demo = ['a','b','c'];
for (let i in demo) {console.log(i+1);}
输出
01
11
21
该语句会遍历返回对象的原型中的属性
var demo = {a:1,b:2};
Object.prototype.c='3';
for (let key in demo) {console.log(key);}
输出
a
b
c
七、for of语句:迭代一个可迭代对象的属性值,继承的属性不会被迭代,该语句不能被用于object对象
可迭代协议:当一个对象实现了Symbol.iterator属性就被视为具有iterator接口,就可以使用for of语句进行迭代
let demo = {a:1,b:2};
for (let val of demo){console.log(val);}
// 报错,Uncaught TypeError: demo is not iterable
Object.prototype[Symbol.iterator]=function(){
let index = 0;
return {
next: () => {
let keys = Object.keys(this);
return index >= keys.length ? {done: true} : {value: this[keys[index++]], done: false}
}
}
}
for (let val of demo){console.log(val);}
输出
1
2
通过返回对象中的next()方法来依次返回遍历结果
八、break和continue语句:用于在循环中精确地控制代码的执行。其中,break语句会立即退出循环,强制继续执行循环体后面的语句。而continue语句退出当前循环,继续后面的循环。
九、with语句是将代码的作用域设置到一个特定的对象中
var box = {'name' : 'myname','age' : 20,'height' : 175}; var n = box.name; var a = box.age; var h = box.height; 可以将上面的三段赋值操作改写成: with (box) { //省略了box对象名 var n = name; var a = age; var h = height; }
十、label标记
当一个循环中嵌套循环时,内层循环如果想要停止整个循环包括外城循环时,可以使用label语法
mylabel: for(let i=0 ; i<10 ; i++){
for(let j=0 ; j<10 ; j++){
if (j==5){
break mylabel;
}
}
}
其中mylabel可以是任意的非保留关键字的字符串