zoukankan      html  css  js  c++  java
  • 从头开始学JavaScript (六)——语句

    一、条件分支语句:if

    基本格式:

    if (<表达式1>){
        <语句组1>
    }else if (<表达式2>){
        <语句组2>
    }else{
        <语句组3>

    执行流程:

    二、循环语句

    2.1前测试循环语句:在循环体内的代码被执行之前就对出口条件求值。

    2.1.1while语句

    基本格式:

    while(表达式){<语句组>}

    执行流程:

    2.1.2 for语句

    基本格式:
    for (<初始表达式>;<条件表达式>;<变动量表达式>){
        <语句组>
    }

    执行流程:
     

    2.2后测试循环语句:在循环体中的代码被执行之后才会测试出口条件。

    2.2.1、do-while语句

    基本格式:

    do {
        <语句组>
    } while (<表达式>) ;

    执行流程:

    三、精准的迭代语句:for-in

    基本格式:
    for ( 属性 in 对象 ){
        <语句组>
    }

    作用:重复执行指定对象的所有属性,可以用来枚举对象的属性。

     例子:

    <html>
    <body>
    <p>点击下面的按钮,循环遍历对象 "person" 的属性。</p>
    <button onclick="myFunction()">点击这里</button>
    <p id="demo"></p>
    
    <script>
    function myFunction()
    {
    var x;
    var txt="";
    var person={fname:"Bill",lname:"Gates",age:56}; 
    
    for (x in person)
    {
    txt=txt + person[x];
    }
    
    document.getElementById("demo").innerHTML=txt;
    }
    </script>
    </body>
    </html>

    如果要表示的对象为null或者undefined,循环体将不再执行,或者抛出错误,因此,在执行for-in循环时,应该先检测改对象的属性值是不是null或者undefined。

    四、Lable语句

    基本语法:

    Label: <语句组>

    如: begin: for (var i = 0; i < 10 ; i++ ){
                             alert(i);
                       }
    举例说明lable语句的作用:
    未加lable:
    var num = 0;
            for (var i = 0 ; i < 10 ; i++){
                 for (var j = 0 ; j < 10 ; j++){
                      if( i == 5 && j == 5 ){
                            break;
                      }
                 num++;
                 }
            }
            alert(num);//95

    加入lable:

    var num = 0;
        outPoint:
        for (var i = 0 ; i < 10 ; i++){
             for (var j = 0 ; j < 10 ; j++){
                  if( i == 5 && j == 5 ){
                        break outPoint;
                  }
             num++;
             }
        }
        alert(num); //55

    第一个例子输出95不难理解,第二个例子为什么输出55呢,是因为执行到break outpoint时,直接跳出到putpoint层,执行alert语句。

    如果把第二个例子改成下面这样:

     1                var num = 0;
     2                 for (var i = 0 ; i < 10 ; i++){
     3                     outPoint: 
     4                     for (var j = 0 ; j < 10 ; j++){
     5                         if( i == 5 && j == 5 ){
     6                             break  outPoint;
     7                         }
     8                         num++;
     9                     }
    10                 };
    11 
    12         alert(num);//95

    这个结果和第一个例子的结果是一致的。

    五、break和continue语句

    5.1break语句:

    1        var num = 0;
    2         for (var i = 1 ; i < 10 ; i++){
    3             if(i%5==0){
    4                 break;
    5             }
    6             num++;
    7         };
    8         alert(num);//4

    break语句执行后跳到alert语句

    5.2continue语句:

    1  var num = 0;
    2  for (var i = 1 ; i < 10 ; i++){
    3     if(i%5==0){
    4        continue;
    5     }
    6       num++;
    7   };
    8   alert(num);//8

    continue语句执行后跳到for()循环,继续执行循环,直到循环条件不成立。

    六、with语句

    基本语法:

    with (object) {
        statements
    }
    举例说明:
    不使用with的写法:
    var qs = location.search.substring(1);
    var hostName = location.hostname;      
    var url = location.href;
     alert(qs);
     alert(hostName);
     alert(url);

    使用with的写法:

    1  with(location){
    2             var qs = search.substring(1);
    3             var hostName = hostname;      
    4             var url = href;
    5         }
    6 
    7         alert(qs);
    8         alert(hostName);
    9         alert(url);

    从上面例子可以看出:with语句的作用是将代码的作用域设置到一个特定的对象中、减少的重复输入。

    但是js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化。

    因此并不建议大规模使用with语句。

    七、swith语句

    基本语法:
    switch (<表达式>) {
        case <数值1>:<语句组1>
                     break;
        case <数值2>:<语句组2>
                     break;
        ...
        default <语句组> 

    执行流程:

    switch语句可以是任何数据类型,每个case的值也不一定是常量,也可以是变量、表达式等,例如:

     1  switch ("hello world") {
     2             case "hello" + " world": 
     3                 alert("Greeting was found.");
     4                 break;
     5             case "goodbye": 
     6                 alert("Closing was found.");
     7                 break;
     8             default: 
     9                 alert("Unexpected message was found.");
    10         }
     1         var num = 25;
     2         switch (true) {
     3             case num < 0: 
     4                 alert("Less than 0.");
     5                 break;
     6             case num >= 0 && num <= 10: 
     7                 alert("Between 0 and 10.");
     8                 break;
     9             case num > 10 && num <= 20: 
    10                 alert("Between 10 and 20.");
    11                 break;
    12             default: 
    13                 alert("More than 20.");
    14         }

    switch语句在比较时使用的是全等操作符比较,因此不会发生类型转换。

    练习:

    1 <script type="text/javascript">
    2         var count = 10;
    3         for (var i=0; i < count; i++){
    4             alert(i);
    5         }
    6         alert(i);   //输出什么?
    7 
    8     </script>
    for(;;){
        alert("2");//输出多少次2?
    }
  • 相关阅读:
    训练总结
    图论--最短路--SPFA模板(能过题,真没错的模板)
    图论--最短路-- Dijkstra模板(目前见到的最好用的)
    The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)
    关于RMQ问题的四种解法
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 XKC's basketball team
    The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 D Carneginon
    ZOJ 3607 Lazier Salesgirl (枚举)
    ZOJ 3605 Find the Marble(dp)
  • 原文地址:https://www.cnblogs.com/yxField/p/4219935.html
Copyright © 2011-2022 走看看