JavaScript语句概述

课后整理 2020-12-10

语句分类

JavaScript语言定义了20套(或个)语句命令,分别执行不同的操作。

以用途划分,JavaScript语句可以分为:声明、分支控制、循环控制、流程控制、异常处理和其它,详细比较说明可以扫码了解。

以结构划分,JavaScript语句又可以分为单句和复句。

定义语句

在JavaScript中,使用分号可以定义一条语句。例如:

var a;

当语句单独一行显示时,可以省略分号,JavaScript在解析时会自动补全分号。

【注意】

只有当省略分号,JavaScript无法合并上下行进行解析时,才会补加分号。例如:

var a
a = 1

合并为一行后等于:

var a a = 1

JavaScript无法理解这句话的意思,于是添加分号,定义为2句话来解析。但是,对于下面3行代码:

var b = ""
var a = b
(a = "abc").toUpperCase()

如果不添加分号,JavaScript就会错误解析为如下2句:

var b = "";
var a = b(a =  "abc").toUpperCase();

第2行结尾是变量b,第3行开头是小括号,于是JavaScript就理解为b()函数的调用。

提示,以[、(、/、+、-这5个符号开头的一行代码,很容易与上一行代码结合。例如:

a
[3].length                                                 //上下行合并解析为:a[3].length
a
/b/                                                           //上下行合并解析为:a/b/
a
-1                                                            //上下行合并解析为:a-1
a
+1                                                           //上下行合并解析为:a+1

但是,对于下面两种特例需要警惕。

第一,return、break和continue三个语句,如果分行显示,JavaScript不会自动合并下一行进行解析。例如:

return
1;                                                            //不会合并,直接解析为2句话:return;  1;

第二,++(递增)和—(递减)运算符会与下一行变量主动合并解析,但不会与上一行变量合并解析。例如:

var a = b = 1;
a                                                              //结果为1
++
b                                                             //结果为2

因此,当所有句子结束时,建议养成良好习惯,使用分号进行定义。只有这样,当代码被压缩时,不至于出现各种异常。

单句

单句比较简单,一般占据一行,可以不执行任何任务,或者运算表达式,或者执行简短的命令等。单句主要包括:

复句

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

复句又称语句块,语句块是一个独立运行的单元。在没有流程控制的情况下,块内语句要么都执行,要么都不执行。复句不需要使用分号与后面代码进行分隔,不过添加分号也不会出错。

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

{
     //空复句 
}
{
     console.log("单复句");
}
{
     console.log("外层复句");
     {
         console.log("内层复句");
     }
}

空语句

空语句就是没有任何可执行的代码,只有一个分号(;)。空语句没有任何副作用,也不会执行任何动作,相当于一个占位符。

【示例2】在循环结构中使用空语句可以设计假循环。下面代码在大括号内没有写入分号,但是JavaScript能够自动添加分号,定义一个空语句。

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

上面代码可以简写为:

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

上面写法容易引发错误,可以加上注释,或者使用复合。

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

表达式语句

任何表达式加上分号就是表达式语句。

【示例3】下面是一行最简单的句子。只有一个直接量,也是最简单的表达式。

true;                                                         //最简单的句子 

【示例4】下面是赋值语句,代码虽然很长,不过也只是一个表达式语句。

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);

【提示】

表达式与语句的区别。

声明语句

声明语句包括三种:声明变量、声明函数和声明标签。

使用var语句可以声明变量,具体用法可以参考2.2.1节内容。

【示例5】下面代码分别以不同形式声明多个变量并初始化(赋值)。

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

使用function语句可以声明函数,具体用法可以参考8.1节内容。

【示例6】下面代码使用function语句声明一个函数,函数名为f。

function f(){
     console.log("声明函数");
}

调试语句

debugger语句用于停止执行JavaScript,同时如果调试函数可用,会调用调试函数。

debugger 语句可以放在代码的任何位置以中止脚本执行,但不会关闭任何文件或清除任何变量,类似于在代码中设置断点。

注意,如果调试工具不可用,则调试语句将无法工作。一般可以在浏览器中按F12键开启调试工具。

【示例7】下面代码使用 debugger 语句中止执行for循环的每一次迭代。先在IE中开启调试工具。

for(i = 1; i<5; i++) {
   console.log("循环次数:" + i);
   debugger;
}

with语句

with语句能够临时改变作用域。语法格式如下:

with (object)
   statement

参数object表示一个对象,它临时定义了with结构体内所有变量的作用域,当执行完with结构之后,又恢复变量的原始状态。

with关键字后面必须跟随一个由小括号包含的对象,而不是表达式。这个对象能够临时划定一个范围,指定with结构体内的变量都以它作为作用域。

【示例8】对于下面语句。

document.getElementsByTagName("input")[0].value  = 0;
document.getElementsByTagName("input")[1].value  = 1;
document.getElementsByTagName("input")[2].value  = 2;

可以把它转换为with结构来表示。

with(o=document.getElementsByTagName("input")){
    o[0].value = 0;
    o[1].value = 1;
    o[2].value = 3;
}

with结构可能会破坏变量的作用域,不推荐使用。建议使用变量引用的方法。

var o =  document.getElementsByTagName("input");
o[0].value = 0;
o[1].value = 1;
o[2].value = 3;