JS语句以分号结束。
空语句
;
声明语句
var
var声明的语句是无法通过delete删除的。
如果var语句中的变量没有指定初始化表达式,那么这个变量的值初始化为undefined。
function
例如:
var f = function(x) {return x + 1;}
function f(x) { return x + 1; }
函数声明语句通常出现在JS代码的最顶层,也可以嵌套在其他函数体内。但在嵌套时,函数声明只能出现在所嵌套函数的顶部。也就是说,函数定义不能出现在if语句,while循环或其他任何语句。
条件语句
if else else if
switch
例如:
switch (n) {
case 1:
//
break;
case 2:
//
break;
default:
//
break;
}
function convert(x) {
switch(typeof x){
case 'number':
return x.toString(16);
case 'string':
return '"' + x + '"';
default:
return String(x);
}
}
每个case的匹配操作实际上是“===”恒等运算符比较,而不是“==”相等运算符比较。
循环语句
while
do while
for
for/in
for (variable in object)
statement
例如:
for (var p in o){
... ...
}
跳转语句
标签语句
identifier : statement
通过给语句定义标签,就可以在程序的任何地方通过标签名引用这条语句。
例如:
mainloop : while(token != null){
//
continue mainloop;
//
}
break
break后面可以加标签,和标签名之间不能换行。
不管break语句带不带标签,它的控制权都无法越过函数的边界。比如,对于一条带标签的函数定义语句来说,不能从函数内部通过这个标签来跳转到函数外部。
continue
也可以带标签。
return
return语句可以单独使用而不必带有expression,这样的函数会向调用程序返回 undefined。
throw
throw expression;
expression的值可以是任意类型的,可以抛出一个代表错误码的数字,或者包含可读的错误消息的字符串。当JS解释器抛出异常的时候通常采用Error类型或其子类型,一个Error对象有一个name属性表示错误类型,一个message属性用来存放传递给构造函数的字符串。当抛出异常时,JS解释器会立即停止当前正在执行的逻辑,并跳转至就近的异常处理程序。
例如:
function factorial(x) {
if (x < 0) throw new Error("x 不能是负数");
... ...
}
try / catch / finally
如果finally块使用了return continue break 或者throw语句使程序发生跳转,或者通过调用了抛出异常的方法改变了程序流程,不管这个跳转使程序挂起还是继续执行,解释器都会将其忽略。
例如:
try{
}
catch (e){
}
finally{
}