• 表达式语句(expression statement):把表达式当做语句的用法;

  • 声明语句(declaration statement):用来声明新变量或定义新函数;

  • 控制结构(control structure):改变语句的默认执行顺序:

    • 条件(conditional)语句;

    • 循环(loop)语句;

    • 跳转(jump)语句;

1 表达式语句

赋值语句、delete运算符、函数调用等

2 复合语句和空语句

复合语句

  • 复合语句(compound statement):将多条语句联合在一起,当成一条单独的语句;

    • 语句块的结尾不需要分号;

    • 语句块中的行要缩进整齐(为了可读性);

当希望多条语句被当成一条语句使用时,就应该使用复合语句


{
    var x = Math.PI;
    console.log(x);
}

空语句

  • 空语句(empty statement):允许包含0条语句的语句:

    • 如果有特殊目的需要用到空语句,那么在代码中添加注释:


var arr = [1,2,3];
for (var i = 0; i < arr.length; i++) /* empty */ ; //空语句

3 声明语句

3.1 var

语法:var name_1 [ = value_1 ] [,..., name_n [ = value_n ]]

3.2 function

语法:

function funcname ([arg1 [, arg2 [..., argn]]]) {
    statements
}

4 条件语句

4.1 if

语法:

if (condition) {
    // statement
}

语法:

if (condition) {
    // statement
} else {
    // statement
}

4.2 else-if

语法:

if (condition) {
    // statement
} else if (condition) {

} else if (condition) {

} else {

}

4.3 switch

语法:

switch (expression) {
    case label_1:
        // statements_1
        break;
    default:
        // statements_def
        break;
}

case匹配操作实际上是恒等运算符的比较

5 循环

5.1 while

语法:

while (condition) {
    // statement
}

5.2 do-while

语法:

do{
    // statement
} while (condition);

5.3 for

关键点在于初始化、检测和更新

语法:

for (initialize; test; increment) {
    statement
};

//相当于如下的while循环:
initialize;
while (test) {
    statement
    increment;
}

//死循环:
while(true);
for(;;);

5.4 for-in

用来遍历对象属性;

语法:

for (variable in object) {
    // statement
}

//将所有对象属性复制到一个数组中
var o = {
    x: 1,
    y: 2,
    z: 3
};
var a = [],
    i = 0;
for (a[i++] in o);
console.log(a.toString()); //x,y,z

6 跳转

6.1 标签语句

语法:identifier: statement


var arr = [1,2,3];
mainloop: for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
    if (arr[i] === 2) {
        break mainloop; //当arr[i]为2时结束循环
    }
};

6.2 break语句

语法:break;break labelname;


var arr = [1,2,3];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] === 2) {
        console.log(arr[i]);
        break;
    }
};

通过break来跳出非就近的循环体或者switch语句时,就会用到带标签的break语句

6.3 continue语句

语法:continue;continue labelname;

6.4 return语句

语法:return expression;

6.5 throw语句

语法:throw expression;


var x = 2;
if (x !== 3) {
    throw new Error("no access."); //Uncaught Error: no access.
}

6.6 try/catch/finally语句

语法:

try {
    // statements
} catch(e) {
    // statements
    console.log(e);
}

try {
    // statements
} catch(e) {
    // statements
    console.log(e);
} finally {
    // statements
}

try {
    throw new Error("hello");
} catch(e) {
    console.log(e.message); //"hello"
} finally {
    console.log("finally run"); //finally run
}

7 其他语句类型

with、debugger、use strict

7.1 with语句

用于临时扩展作用域链

严格模式下禁止

7.2 debugger语句

ECMAScript 5正式加入debugger,作用是产生一个断点

7.3 use strict

语法:"use strict"


JS菌
6.4k 声望2k 粉丝