1. 程式人生 > >表達式和語句

表達式和語句

3.2 ont bre err defined es6 efault stat 作用域

貌似很簡單的概念,其實還是很值得深挖的。

1.基本概念

表達式是一種有值的語法結構,它能產生一個值,我們能拿這個值參與各種運算,比如var a;console.log(a=10);//輸出10 這裏a=10是一個賦值表達式,將10賦值給變量a,這麽一來a的值為10,同時該賦值表達式返回a的值10作為函數console.log()的參數 語句是一種控制程序運行的語法結構,在宏觀上調控程序。

2.表達式類型

2.1 變量常量表達式

a 3.4

2.2 算術表達式

a+b i++ ++i

2.3 賦值表達式

a = 3; b = a+4

2.4 邏輯表達式

a && b 1 || 3

2.5 關系表達式

a < 4 b == 5

2.6 逗號表達式

a=3,b

3.語句類型

3.1 表達式語句

表達式加上分號就變成了表達式語句,比如a = 3; some();3;

3.2 語句塊

用一個花括號將各種代碼包含起來,這種結構稱為語句塊。在ES6中出現了塊作用域,用法是聲明變量時,不是用var關鍵字,而是用let關鍵字 案例一:
{
    var a = 10;
    let b = 20;
}
console.log(a);//10
console.log(b);//ReferenceError
用let聲明的變量b作用域僅限在{}範圍內,在{}外訪問不到變量b 案例二:break可以用於任何標記語句
foo: {
            console.log(
‘face‘);//face break foo; console.log(‘this will not be executed‘);//不會輸出 }
console.log(
‘swap‘);//swap
案例三:continue只能用於循環標記語句
var i, j;
        loop1:
            for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1"
                loop2:
                    
for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2" if (i == 1 && j == 1) { continue ; } /*** i = 0, j = 0 i = 0, j = 1 i = 0, j = 2 i = 1, j = 0 i = 1, j = 2 i = 2, j = 0 i = 2, j = 1 i = 2, j = 2 ***/ console.log("i = " + i + ", j = " + j); } } var i, j; loop1: for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1" loop2: for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2" if (i == 1 && j == 1) { continue loop1; } /*** i = 0, j = 0 i = 0, j = 1 i = 0, j = 2 i = 1, j = 0 i = 2, j = 0 i = 2, j = 1 i = 2, j = 2 ***/ console.log("i = " + i + ", j = " + j); } }
兩段程序的區別就是continue處。第一段程序,continue後面沒有標記,表示返回到當前循環,也就是轉到loop2處繼續執行,而此時i的值是1,繼續執行的話,i的值仍然為1,j的值變為2。也就是continue的運行不會影響到i的值,它的作用僅僅是忽略j=1.第二段程序continue loop1表示程序的執行方向跳到loop1的位置,而位於loop1處的代碼是外層循環,這麽一來continue loop1表示,停止當前內層循環的運行,跳到外層循環處,這麽一來,原本i=1,j=1,直接跳到外層循環,忽略了j=2的處理。在外層循環處,經過i++運算,i變為了2,然後繼續內層循環的執行。 案例四:錯誤案例
pmx:{
        var a = 10;
            console.log(a);
        }
        {
            console.log("hello");
            break pmx;
            console.log("hi");
        }
瀏覽器報語法錯誤:SyntaxError:Undefined label ‘pmx‘ 因為break能識別的標識語句是自身所在的語句塊或者父語句塊,顯然標識符"pmx"所標識的語句和break所在的語句一點關系都沒有,自然break不知道要跳轉到哪裏了。

3.3 空語句

只有一個分號的語句,它表示什麽也不做。var i=0;for(;i<10;i++){...}

3.4 控制語句

3.4.1 循環控制語句

     while(true){
            console.log("while 語句");
            break;
        }
        do{
            console.log(‘do while語句‘)
            break;
        }while(true);
        for(;;){
            console.log("for 語句");
            break;
        }

   3.4.2 條件語句

var a = 10;
        if(a < 30){
            console.log("if 語句")
        }
        if(a < 20){
            console.log("if else語句");
        }else{

        }
        if(a < 5){

        }else if(a < 6){
        
        }else if(a < 11){
            console.log("if else if else if 。。。語句");
        }
        switch(a){
            case 1:
                break;
            case 2:
                break;
            case 10:
                console.log("switch 語句");
                break;
            default:
        }

   3.4.3 特殊控制語句

   return;    return 10;    break;   continue;

表達式和語句