• JS的控制语句与异常


    if 控制语句

    '''
    if-else基本格式
    if (表达式){
    语句1;
    ......
    }else{
    语句2;
    .....
    };
    功能说明:如果表达式的值为true则执行语句1,否则执行语句2
    '''

    var x= (new Date()).getDay();
    // 获取今天的星期值,0为星期天
    var y;
    
    if ( (x==6) || (x==0) ) {
    y="周末";
    }else{
    y="工作日";
    };
    alert(y);
    // 等价于 y="工作日"; if ( (x==6) || (x==0) ) { y="周末"; };

    if 可以单独使用

    if语句嵌套格式
    if (表达式1) {
        语句1;
    }else if (表达式2){
        语句2;
    }else if (表达式3){
        语句3;
    } else{
        语句4;
    };

    if (x==1){
        y="星期一";
    }else if (x==2){
        y="星期二";
    ...
    }else if (x==6){
        y="星期六";
    }else if (x==0){
        y="星期日";
    }else{
        y="未定义";
    };

    switch  选择控制语句

    '''
    switch基本格式
    switch (表达式) {
    case 值1:语句1;break;
    case 值2:语句2;break;
    case 值3:语句3;break;
    default:语句4;
    };
    '''

    switch(x){
    case 1:y="星期一";    break;
    case 2:y="星期二";    break;
    case 3:y="星期三";    break;
    case 4:y="星期四";    break;
    case 5:y="星期五";    break;
    case 6:y="星期六";    break;
    case 7:y="星期日";    break;
    default: y="未定义";};

    switchelse if结构更加简洁清晰,使程序可读性更强,效率更高。

    首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
    说到基本类型的数值比较,那当然要有两个数。然后重点来了——
    if 语句每一句都是独立的,看下面的语句:
    if (a == 1) ...
    else if (a == 2) ...
    这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
    于是 switch case 就出来了,把上面的改成 switch case 版本:
    switch (a) {
            case 0:
                    break;
            case 1:
    }
                    
    总结:
    
    1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
    2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选
      择执行哪一个case的语句块
    3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载
      一次。
    所以在多路分支时用switch比if..else if .. else结构要效率高。
    switch为什么效率高?

    for  循环控制语句

    '''
    for循环基本格式
    for (初始化;条件;增量) {
        语句1;
        ...
    };
    功能说明:实现条件循环,当条件成立时,执行语句1,否则跳出循环体
    '''

    for (var i=1;i<=7;i++){
        document.write("<H"+i+">hello</H "+i+"> ");
        document.write("<br>");
    };
    //----------------------------------------------
    var arr=[1,"hello",true]//var dic={"1":"111"}
    for (var i in arr){
        console.log(i);
        console.log(arr[i]);
    };

    注意:

    doms=document.getElementsByTagName("p");
    
    for (var i in doms) {
        console.log(i); // 0 1 2 length item namedItem
    };
    
    // 循环的是你获取的th一个DOM元素集,for in用来循环对象的所有属性,dom元素集包含了你上面输出的属性。
    // 如果你只要循环dom对象的话,可以用for循环:

    for (var i=0;i<doms.length;i++) { console.log(i); // 0 1 2 // console.log(doms[i]); };

    结论:for i in 不推荐使用.

    while  循环控制语句

    '''
    while循环基本格式
    while (条件){
    语句1;
    ...
    };
    功能说明:运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环
    '''

    var i=1;
    while (i<=7) {
        document.write("<H"+i+">hello</H "+i+"> ");
        document.write("<br>");
        i++;
    }
    //循环输出H1到H7的字体大小
    <script language="JavaScript">
    /* sayhello是定义的函数名,前面必须加上function和空格*/
    function sayHello() {
        var hellostr;
        var myname=prompt("请问您贵姓?",""); 
        hellostr="您好,"+myname+'先生,欢迎进入"探索之旅"!';
        alert(hellostr); 
        document.write(hellostr);
    };
     //这里是对前面定义的函数进行调用
    sayHello();
    </script>

    练习:分别用for循环和while循环计算出1-100的和?

    异常处理

    '''
    try {
        // 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
    }
    catch (e) {
        // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
        // e是一个局部变量,用来指向Error对象或者其他抛出的对象
    }
    finally {
         // 无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
    };
    '''

    注:主动抛出异常 throw Error('xxxx')

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>标题</title>
    </head>
    <body>
    
    <p>p1</p>
    <p>p2</p>
    <p>p3</p>
    <p>p4</p>
    
        <script>
            /* if控制语句 */
            // var name='alex';
            // if (name=='mike') {
            //     alert('mike')
            // }else if (name=='jack') {
            //     alert('jack')
            // }else {
            //     alert('alex')
            // };
    
    
            /* switch控制语句 */
            // var week='7';
            // switch (week) {
            //     case 1:alert('星期一'); break; // case 判断值:执行语句; break; 如果没有break,那么执行完后依旧会执行下一条
            //     case 2:alert('星期二'); break;
            //     case 3:alert('星期三'); break;
            //     case 4:alert('星期四'); break;
            //     case 5:alert('星期五'); break;
            //     case 6:alert('星期六'); break;
            //     case 7:alert('星期天'); break;
            //     default: alert('未定义'); // default: 执行语句; 尽量放在最后,如果不在最后那么后面也要加上break
            // }
    
    
            /* for循环 */
            // for (var a=0; a<10; a++) {
            //     // for (初始化; 条件; 增量) {执行语句};
            //     document.write("循环第" + (a+1) + "次" + "<br>")
            // };
            //
            // var attr=['a', 'b', 'c', 'd']
            // for (var x=0; x<attr.length; x++) {
            //     // attr.length代表此数组长度(4);x代表的是索引,还需要通过数组索引进行取值
            //     document.write('x的值为:' + x + '<br>')
            //     document.write('获取到的值是:' + attr[x] + '<br>')
            // };
            //
            // for (var i in attr) {
            //     // for (初始化 in 对象) {执行语句}; i是索引并不是值;此种方法不推荐使用
            //     document.write('i的值为:' + i + '<br>')
            //     document.write('获取到的值是:' + attr[i] + '<br>')
            // };
            //
            // // for (初始化 in 对象) {执行语句}; 的不便之处,在html加上几个标签然后再循环取,发现最后多出了length item namedItem,这三个为标签属性
            // var eles_P=document.getElementsByTagName('p');
            // for (var e in eles_P) {
            //     console.log(e)
            // };
    
    
            /* while循环,格式while (条件) {执行语句}; */
            // var n=0, m=0;
            // while (n<101) {
            //     m+=n;
            //     n++; // 这里是控制n的自增,很容易忘记,不控制的话进入了死循环
            // };
            // document.write(m);
    
    
            /* 异常 */
            try {
                // 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
                console.log('ok');
                throw Error('***define error***') // throw Error主动抛出异常
            }
            catch (e) {
                // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行
                // e是一个局部变量,用来指向Error对象或者其他抛出的对象
                console.log(e)
            }
            finally {
                // 无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行
                console.log('finally')
            };
        </script>
    
    </body>
    </html>
    while True: print('studying...')
  • 相关阅读:
    Struts2中There is no Action mapped for namespace错误解决方法
    String字符串常量池简介
    main方法中参数"String[ ] args"详解
    自定义异常基本用法
    finally关键字执行的底层原理
    Linux环境下安装mysql5.6(二进制包不是rpm格式)
    finalize关键字小结
    "=="和equals小结
    super关键字小结(构造方法的执行是不是一定会创建对象?)
    冒泡排序
  • 原文地址:https://www.cnblogs.com/xuewei95/p/14999246.html
Copyright © 2020-2023  润新知