《 JavaScript程序设计》-- 第四章 表达式语句章总结及练习

2017-05-05 19:08

主要总结:

  • 一个脚本就是一个语句序列,其中每条语句都会生成某一操作。JavaScript语句包含:声明语句、表达式语句、条件语句、循环语句和中断语句

  • 我们可以将表达式的求值结果存储在变量中,在将来提取它们。变量在使用之前应当声明。如果声明中没有指定初始值,则该变量的初始值为undefined

  • 条件代码通常用if语句、switch语句、?:运算符和短路运算符编写。但是,程序员也可以使用词典来代替条件代码的一些初级使用。

  • while语句在循环的顶端有一个检测,它的循环体可能一次都不会执行。do-while语句的检测在其末端,因此其循环体至少运行一次

  • JavaScript引擎在遇到它不能执行的语句或者不能求值的表达式时,会抛出异常。程序员可以用throw语句显式抛出异常。异常用try-catach语句捕获

  • 代码块是放在大括号中的语句序列,可以单作单个语句使用。在if语句和迭代语句的主体中使用代码块来表示操作,被认为是一种很好的编程实践

  • JavaScript将在它认为你遗漏了分号的地方插入分号。程序员需要保护自己:总是明确使用分号来终结:声明、Expression、do-while、throw、return、break、continue语句。

条件执行(if语句、?:、switch)

if语句

  • if语句会根据你提供的条件,最多执行许多候选操作中的一种。这个语句的最一般形式是有一个if部分,0个或多个else if部分,还可根据需要带有else部分。每个候选项都是大括号中的语句序列。这些条件会自上而下一次评估。只要一个条件为真,就会执行它对应的候选操作,然后结束整个if语句

  • 感悟:能在脑中生成活动图,熟练使用if语句的一般形式和嵌套形式使用等

?:语句(三目运算符)

实际上是if-else语句的一种变形:

if (latitude>=0) {
        hemisphere = "north";
    } else {
        hemisphere = "south";
    }
    // 写为:
    hemisphere = (latitude>=0) ? "north" : "south";

条件表达式有时会用在构建字符串的表达式中,如下(这里的present假定是一个保存布尔值的变量:)

    var notice = "She is "+(present? "" : "n't")+" here.";

switch语句

  • 另一种条件语句 —— switch语句,将一个值一系列case进行比较,知道找出一个与它的值相等(===)的case,然后从该处开始执行语句。可以根据需要包含一个default case,它会匹配所有值。

    switch (direction.toLowerCase()){
        case "north" : row -= 1;
            break;
        case "south" : row += 1;
            break;
        case "east"  : column += 1;
            break;
        case "west"  : column -= 1;
            break;
        default: alert("Illegal direction");
    }
  • break语句会终止整个switch语句。每种case都以一个break结束,这是一种很好的做法;否则,执行会"直落"到下一个case(不会再与剩下的case表达式进行比较)。

  • 例如,上面的脚本我们省略了break,而且方向是"east",会发生什么情况呢?column中的值会被递增,然后递减,然后弹出一个提示框,告诉你"east"不是一个合法方向。

如果需要“直落”呢?

    /*
     * 这个脚本会为一个给定奖励级别生别一组奖励
     * 每个奖励级别的参赛者会得到该级奖励和所有
     * 低级奖励。它使用了一种很丑陋的switch语句
     * 形式,其中的各个case之间没有相互距离。
    */
    
    var level = +prompt("Enter your prize level,1-3");
    var prizes = [];
    switch (level){
        case 3 : prizes.push("car");
        case 2 : prizes.push("ski vacation");
        case 1 : prizes.push("backpack");
        default: prizes.push("certificate");
    }
    alert(prizes);
   

有时,"直落"正是我们想要的。假定在一群参加竞赛的人中,每个人都获得一个证书,但达到一级奖励的人还会得到一个背包,达到二级奖励的人还会得到一次滑雪度假,而达到三级奖励的人还会奖励一俩汽车。这种情况就可以使用没有break语句的编码。