语句

  语句是JavaScript的基本执行单位。JavaScript要求所有的语句都以分号(;)结束。语句既可以是简单的赋值语句,也可以是算术运算语句,还可以是逻辑运算语句等。除此之外,还有一些特殊的语句,下面具体介绍这些特殊的语句。

语句块

  所谓语句块就是使用花括号包含的多个语句,语句块是一个整体的执行体,类似于一个单独的语句。虽然语句块类似于一个单独的语句,但语句块后不需要以分号结束。但语句块中的每个语句都需要以分号结束。

空语句

  最简单的空语句仅有一个分号(;),空语句没有丝毫用处,因此实际中几乎不会使用这种空语句,但空语句主要用于没有循环体的循环。

异常抛出语句

  JavaScript支持异常处理,支持手动抛出异常。与Java不同的是,JavaScript的异常没有Java那么丰富,JavaScript的所有异常都是Error对象。当JavaScript需要抛出异常时,总是通过throw语句抛出Error对象。抛出Error对象的语法如下:

throw new Error(errorString);  

  JavaScript既允许在代码执行过程中抛出异常,也允许在函数定义中抛出异常。在代码执行过程中,一旦遇到异常,立即寻找对应的异常捕捉块(catch块),如果没有对应的异常捕捉块,异常将传播给浏览器,程序非正常中止。

例子
<script type="text/javascript">  
    // 对计数器i循环
    for (var i = 0 ; i < 10 ; i++)
    {
        // 在页面输出i
        document.writeln(i + '<br />');
        // 当i > 4时,抛出用户自定义异常
        if (i > 4) 
            throw new Error('用户自定义错误');
    }
</script>  

  当i = 5时,手动抛出异常,但没有得到处理,因而传播到浏览器,引起程序非正常中止,浏览器也有关于错误的提示。

异常捕捉语句

  当程序出现异常时,这种异常不管是用户手动抛出的异常,还是系统本身的异常,都可使用catch捕捉异常。JavaScript代码运行中一旦出现异常,程序就跳转到对应的catch块。异常捕捉语句的语法格式如下:

try  
{
    statements
}
catch(e)  
{
    statements
}
finally  
{
    statements
}

  这种异常捕捉语句大致上类似于Java的异常捕捉语句,但有一些差别:因为JavaScript的异常体系远不如Java丰富,因此无须使用多个catch块。与Java异常机制类似的是,finally块是可以省略的,但一旦指定了finally块,finally代码块就总会获得执行的机会。

例子
    try
    {
        for (var i = 0 ; i < 10 ; i++)
        {
            // 在页面输出i值
            document.writeln(i + '<br />');
            // 当i大于4时,抛出异常
            if (i > 4) 
                throw new Error('用户自定义错误');
        }
    }
    // 如果try块中的代码出现异常,自动跳转到catch块执行
    catch (e)
    {
        document.writeln('系统出现异常' + e.message + '<br/>');
    }
    // finally块的代码总可以获得执行的机会
    finally
    {
        document.writeln('系统的finally块');
    }

  归纳起来,JavaScript异常机制与Java异常机制存在如下区别。
  ➢ JavaScript只有一个异常类:Error,无须在定义函数时声明抛出该异常,所以没有throws关键字。
  ➢ JavaScript是弱类型语言,所以catch语句后括号里的异常实例无须声明类型。
  ➢ JavaScript只有一个异常类,所以try块后最多只能有一个catch块。
  ➢ 获取异常的描述信息是通过异常对象的message属性,而不是通过getMessage()方法实现的。

with语句

  with语句是一种更简洁的写法,使用with语句可以避免重复书写对象。with语句的语法格式如下:

with(object)  
{
    statements
}

  如果with后的代码块只有一行语句,则可以省略花括号。但在只有一行语句的情况下,使用with语句意义不大。关于with语句的作用,看如下代码:

document.writeln("Hello");  
document.writeln("World");  

  在上面的代码中,多次使用document的writeln方法重复输出静态字符串。使用with语句可以避免重复书写document对象。将上面代码该为如下形式,效果完全相同。

with(document)  
{
    writeln("Hello");
    writeln("World");
}

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。