javascript选择结构及循环结构

107 阅读3分钟

选择结构

一、if...else、if...else if...else

按照某个条件执行某段代码:

在表示判断的情况下(布尔环境),下面表示真假情况:
**1、所有数字为真 ,0为假;**
**2、所有字符串为真,空字符串为假;**
**3nullundefined 为假;**
**4、所有对象为真;**
**5、所有函数为真;**

var score = 70;

//单分支:
if(score>=60){
    console.log('合格!')
}else{  
    console.log('不及格')
}

//多分支:
if(score>=80){
    console.log('优秀!')
}else if(score>=60){
    console.log('合格!')
}else{
    console.log('还需继续努力!');
}

二、switch...case

/*
* 语法结构:
* switch(表达式){
*     case 常量表达式 :语句;
*     case 常量表达式 :语句;
*     ... 
*     default : 语句;
* }
* 说明:
*   1、表达式一般是一个变量,该变量有具体的值,值可为字符串
*   2、default为默认执行,相当于else,可以省略
*   3、default位置任意
*   4、如果case语句后面没有break,会实现case穿透(从满足条件开始,语句依次执行)
*   5、switch表达式的值和常量表达式的值进行比较时,按照全等的方式进行比较,先比较类型,再比较值(case后面的值默认为int)
* 执行逻辑:用表达式的值和case后面的值作比较,如果相等,就执行对应的case语句
    当条件是一个范围时,建议使用if
    当条件有固定值时,建议使用switch
*/

      var month = prompt("请输入一个月份:");
      switch(month){
            case "2" :{
                  var year = parseInt(prompt("请输入年份:"));
                  (year%4==0 && year%100!=0) || year%400==0 ? alert("这个月有29天!") : alert("这个月有28天!")
                  break;
            }
            case "1" :
            case "3" :
            case "5" :
            case "7" :
            case "8" :
            case "10" :
            case "12" : 
                alert("这个月有31天!"); 
                break;
            case "4" :
            case "6" :
            case "9" :
            case "11" : 
                alert("这个月有30天!"); 
                break;
      }

循环结构

一、while

语法结构:
    while(循环条件){
        循环体;
    }
执行逻辑:当循环条件为true时,执行循环体;当循环条件为false时,结束循环;

       var i = 1;
       while(i<=10){
            console.log(i);   //1,2,3,4,5,6,7,8,9,10
            i++;  //步长
       }

二、do...while

语法结构
    do{
        循环体;
    }while(循环条件);
    
/*
* while和do...while的区别:
* while:先判断表达式,后执行循环体,循环体可以一次也不执行
* do...while:先执行循环体,后判断表达式,循环体至少要执行一次
*/

var a = 1;
do { 
    console.log(a);   //1,2,3,4,5,6,7,8,9,10
    a++;
}while(a <= 10);

三、for

知道循环次数用for,不知道用while

for (var a = 0; a <= 5; a++){
    console.log(a);     //0,1,2,3,4,5
}

四、break、continue

  • break:只能用于循环结构中,用于终止循环
  • continue:只能用于循环结构中,用于跳过本次循环
for (var a = 0; a <= 5; a++){
    console.log(a);    //0,1,2,3
    if (a >= 3)
        break;
}

for (var a = 0; a <= 5; a++){
    if (a === 3)
        continue;
    console.log(a);  //0,1,2,4,5
}

循环对象/数组

一、for...in

用于循环对象的key

const arr = [1, 2, 3, 4];
for (let i in arr) { 
    console.log(i);     //0,1,2,3
    console.log(arr[i]);    //1,2,3,4
}


const obj = {
    name: 'aye',
    age: 18
}
for (let i in obj) { 
    console.log(i);     //name,age
    console.log(obj[i])     //aye,18
}

二、for...of

  • 用于循环对象的value
  • 只限于实现了迭代器(iterable)的对象,所以循环普通对象会报错
const arr = [1, 2, 3, 4];
for (let i of arr) { 
    console.log(i);     //1,2,3,4
}

//es6为字符串增加了遍历器接口,使得字符串也可使用for…of遍历
var str = 'abcdef';
for (let i of str) {
    console.log(i);     //a,b,c,d,e,f
}

var obj = {
    name: 'aye',
    age:18
}
for(let i of obj){}     //报错:obj is not iterable
//对于普通对象可以自己去实现其内部的迭代器,过于繁琐,此处先不做探讨,但可通过Object自带的方法实现对普通对象的key及value的循环:
for (let i of Object.keys(obj)) {
    console.log(i)  //name,age
}
for (let i of Object.values(obj)) {
    console.log(i)  //aye,18
}

三、with

  • 用于临时拓展作用域链
  • 严格模式下禁止使用,同时应该注意其带来的性能问题及可能造成的内存泄漏
//例1:
const person = {
    info: {
        name: 'aye',
        age:18
    }
}
with (person) {
    let name = info.name;
    let age = info.age;
    console.log(name, age);
}

//例2:
const obj = {
    a: 1,
    b:2
}
with (obj) {
    a = 4;
    b = 5;
}
console.log(obj.a); //4
console.log(obj.b); //5