JavaScript 网页编程从入门到精通 (清华社"视频大讲堂"大系·网络开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

6.2 简单语句

本节将介绍各种常见的简单语句形式。

6.2.1 表达式语句

表达式与语句的区别如下。

从句法角度分析,表达式是短语(或称为词);语句是一个句子。

从组成角度分析,表达式由运算数和运算符组成;语句由命令关键字和表达式组成。表达式之间可以通过空格分隔;而语句之间必须通过分号分隔。表达式可以包含子表达式,语句也可以包含子语句。

从表现角度分析,表达式呈现静态性;而语句呈现动态性。

从结果趋向分析,表达式返回一个值;而语句完成特定任务。

任何表达式加上分号,就会形成语句,也称为表达式语句。

【示例1】下面这个句子仅是一个数值直接量,它是最简单的句子,也是最简单的表达式。

      1;                                                 //世界上最简单的句子

【示例2】下面这行长代码是一个赋值语句:

      o =new ((o == "String")? String:(o == "Array")? Array:(o ==
          "Number")? Number:(o == "Math")? Math:(o == "Date")? Date:(o ==
          "Boolean")? Boolean:(o == "RegExp")? RegExp:Object);

如果格式化显示等号右侧的代码,它就是一个多重选择结构的连续运算:

      new((o=="String")? String                  :
      (o=="Array")? Array                        :
      (o=="Number")? Number                      :
      (o=="Math")? Math                          :
      (o=="Date")? Date                          :
      (o=="Boolean")? Boolean                    :
      (o=="RegExp")? RegExp                      :
      Object);

代码虽然很长,不过它也只是一个表达式语句。

提示:大部分表达式语句都具有破坏性,完成任务后会改变变量自身的值,如赋值语句、函数调用语句、声明变量语句、定义函数语句等。

6.2.2 复合语句

多个句子(Statement)放在一起就是一个语句段(Statement Block),如果使用大括号括起来,就成了复合语句(Statements)。单个句子被包括在大括号中,也是复合语句。

【示例1】下面两个句子是相互独立的。当脚本被执行时,它们会按顺序被执行:

      alert("Hello");
      alert("World");

如果在条件结构中,这种分散状态就不好控制。例如,下面的条件结构只能够控制第一个句子,第二个句子依然能够执行:

      if(false)
          alert("Hello");
          alert("World");

如果使用复合语句,用大括号把它们包裹在一起,如果再使用条件结构,就比较方便控制。

      if(false)
      {
          alert("Hello");
          alert("World");
      };

注意:这里的大括号不是条件结构的一部分,而是复合语句的一部分。

【示例2】即使没有条件结构,一样可以使用大括号把多个句子括起来作为一个复合语句来使用,此时该复合语句与多个独立单句在最终执行结果上都是一样的。

      {
          alert("Hello");
          alert("World");
      };

复合语句末尾可以不用分号进行分隔,但是内部每个子句必须使用分号分隔,最后一个子句可以省略分号,因为它不会产生语法歧义。

【示例3】复合语句的结构比较复杂,它可以包含子句,也可以包含复句,形成结构嵌套。对于复句内的子句可以通过缩排版式以增强代码的可读性。

      {
          //空复句
      }
      {
          alert("单复句");
      }
      {
          alert("Hello, World! ");
          {
            alert("复句嵌套");
          }
      }

6.2.3 声明语句

var和function表示声明语句,用来声明变量或定义函数,可以在程序中任意位置使用。

1.var

var语句用来声明一个或者多个变量,关键字var后面可以跟随声明变量的列表,变量之间以逗号运算符进行分隔。声明变量时可以同时赋值,以实现对变量进行初始化。

【示例1】下面代码分别以不同形式声明多个变量并赋值。

      var a;                                                 //声明一个变量
      var a=0;                                               //声明一个变量并赋值
      var a, b;                                              //同时声明两个变量
      var a=0, b=true, c, d;                                 //声明4个变量,并部分赋值

【示例2】如果var语句声明变量时,没有赋值,则JavaScript会默认变量初始值为undefined。

      var a;
      alert(a);                                              //返回undefined

【示例3】var语句是通过在当前调用对象中创建同名属性来实现定义每个变量的。

      var a=1;
      function f(){
          var a=2;
          alert(a);                                            //返回2
      }
      alert(window.a);                                         //返回1
      f();                                                     //调用函数对象

在上面的代码中,第一个声明的变量a是作为全局对象Window的属性而存在的,而第二个声明变量a是作为函数f()的调用对象的属性而存在的。当全局对象或者函数调用对象被初始化时,JavaScript解释器会在相应的代码段中寻找var声明的变量,然后在全局对象或者调用对象中创建相应的属性,此时它是未赋值的。当程序执行到相应的var声明代码段时才会给相应对象的属性赋值。因此,使用var语句重复声明变量时,不会引发编译错误。

var语句声明的变量是JavaScript标准声明变量的方法,同时使用var语句声明的变量是永久性的,不能够使用delete运算符删除该变量。

【示例4】var语句的使用是有限制的,它不能在循环或条件结构内的条件表达式中使用。例如,下面的用法都是错误的:

      while(var i = 0, (i ++) < 10){
          alert(i);
      }

下面用法也是错误的:

      if(var i = false){
          alert(i);
      }

但是,它可以在for或for/in结构中的条件表达式中使用:

      for(var i = 0; i<10; i++){
          alert(i);
      }
      for(var i in document){
          alert(i);
      }

2.function

使用function声明语句可以声明一个函数。

【示例5】下面的代码使用了function语句声明一个函数f。

      function f(){
          alert("声明并初始化函数变量");
      }

其中变量名为f,变量初始值为一个函数体结构。

【示例6】也可以把函数作为一个值,赋值给一个变量。

例如,上面的函数声明语句可以转换为:

      var f = function(){
          alert("声明并初始化函数变量");
      }

上面代码相当于把一个匿名函数赋值给变量f。

6.2.4 空语句

空语句,顾名思义就是没有任何代码的句子,它只有一个分号(;),表示该语句的结束。例如:

      ;                                                         //空语句

空语句不会产生任何作用,也不会执行任何动作,相当于一个占位符。

【示例1】在循环结构中使用空语句可以设计假循环或者空循环:

      for(var i = 0; i < 10; i ++ )
      {
          ;
      }

上面代码可以简写为:

      for(var i = 0; i < 10; i ++ );

【示例2】空语句易引发错误,最安全的方法是使用复合语句的形式来表示,或者加上注释,避免遗漏。

      for(var i = 0; i < 10; i ++ )/*空语句*/;

或者

      for(var i = 0; i < 10; i ++ ){
                  ;
      }