• 《JavaScript高级程序设计》读书笔记(三)基本概念第五小节流程控制语句


    内容
    ---语法
    ---数据类型 上一小节
    ---流程控制语句 本小节
    ---理解函数

    语句
    --ECMA-262规定了一组语句,也称流程控制语句

    if语句
    -- 条件可以是任意表达式,
    -- ECMAScript会自动调用Boolean()转化结果为一个布尔值
    -- 推荐始终使用代码块,即使只有一行代码

    if(condition) { 
        statement1;
    } else if () {
        statement2;
    } else { 
        statement3;
    }

    do-while语句
    --后测试循环语句
    --在对条件表达式求值之前,循环体中的代码至少会被执行一次

    do {
        statement;
    } while (expression);


    while 语句
    --前测试循环语句
    --在循环体代买执行之前,就会对出口条件求值

    while(expression) {
        statement;
    }


    for 语句
    --前侧循环语句
    --具有,执行循环之前初始化变量和定义循环后要执行代码的能力

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

    --for与while相同,while循环做不到的,for循环也做不到
    --在for循环的变量初始化表达式中声明的变量,和在外部声明是一样的
    --因为ECMACScript不存在块级作用域(es6的let声明 是块级,之前没有)
    --因此在循环内部定义的变量外部也可以访问


    for-in语句
    --一种精准的迭代语句
    --用来枚举对象的属性

    for(property in expression) {
        statement;
    }

    举例

    for(var propName in window) {
        console.log(propName);
    }

    --使用for-in循环了BOM中window对象的所有属性
    --与for语句类似,var也不是必须的
    --但是我们推荐使用局部变量
    --ECMAScript对象的属性是没有顺序的,
    --所以遍历的顺序是不可预测的
    --如果要迭代的对象为null或者undefined,会抛出错误
    --es5更改了这一行为,变成不执行循环体
    --建议在for-in之前检查对象不是null或者undefined 为了兼容


    label语句
    --在代码中添加标签,以便将来使用

    label:statement;

    例如

    start:for(var i=0;i<10;i++) {
        console.log(i);
    }

    --start标签可以由break或者continue语句引用

    --加标签的语句一般都与for等循环语句配合使用


    break和continue语句
    --用于在循环中精准的控制代码的执行
    --break语句会立即跳出循环,执行循环之后的代码
    --continue会立即跳出本次循环,从循坏开始继续执行

    var num = 0;
    for(var i=1;i<10;i++) {
        if(i%5 == 0) {
            break;
        }
        num++;
    }
    num; //4

    --当i=5时,num=4,i%5 ==0 成立跳出循环

    --循环了5次,第五次提前跳出循环,没有执行num++

    var num = 0;
    for(var i=1;i<10;i++) {
        if(i%5 == 0) {
            continue;
        }
        num++;
    }
    num; //8

    --当i=5时,num=4,i%5 ==0 成立跳出本次

    --总共9次,i=5时,提前跳出本次循环,没有执行num++


    --break和continue语句都可以和label语句联合使用,
    --多发生在循环嵌套的情况下,break或者continue指定循环体

    start:
    for(let i=0;i<5;i++) {
        for(let j=0;j<5;j++) {
            if(j==3) {
                continue start;
                //break start;
            }
            console.log(i+"-"+j);
        }
    }

    --当条件成立跳出label指定循环结构
    --continue start; j==3时,直接跳出本次并标出本层循环,从下一个i开始
    --所以不会有j=4
    --break start; j==3时,直接跳出这两层循环体
    --所以不会有i=1 以及之后


    with语句
    --将代码的作用域设置到一个指定的对象中

    with(expression) {
        statement;
    }

    --用于简化多次编写同一对象的工作

    var qs = location.search.substring(1);
    var hostName = location.hostname;
    var url = location.href;

    --上面的代码都包含location对象,用with可以

    with(location) {
        var qs = search.substring(1);
        var hostName = hostname;
        var url = href;
    }

    --with语句关联了location对象,在with语句代码块中
    --每个变量首先被认为是局部变量,如果在局部环境中找不到该变量的定义
    --就会查询location对象中是否有同名属性,有,则以此为变量的值

    --严格模式下不允许使用with语句,with语句会导致性能下降
    --也给调试代码造成困难
    --因此在开发大型应用程序时,不建议使用with


    switch语句
    --case 用于匹配值,并执行其中的语句(if)
    --default 用于不匹配时,执行的语句(else)
    --break用于跳出switch,
    --不写则会在执行完当前case之后,不用判断继续执行下面的代码块中的代码
    --ECMAScript中的switch 可以接受任何数据类型
    --switch语句中的比较使用的是全等,所以 10 不等于 "10"

    var a = "C"
    switch(a) {
        case "A":
            console.log("this is A");
            break;
        case "B":
        case "C":
            console.log("this is B or C");
            break;
        default:
            console.log("other");
    }
  • 相关阅读:
    Android官方命令深入分析之bmgr
    Android官方命令深入分析之AVD Manager
    Android 官方命令深入分析之android
    token的设置与获取
    SpringBoot使用Redis共享用户session信息
    thymeleaf资源加载问题(从Controller跳转)
    ajax传递数组,后台更新
    BootStrap表单验证用户名重复
    hadoop3.x.x错误解决
    Hadoop安装
  • 原文地址:https://www.cnblogs.com/loveluking/p/9431777.html
Copyright © 2020-2023  润新知