深刻淺出Javascript:語句和聲明

Javascript 語句和聲明

控制流程

Block

一個塊語句能夠用來管理零個或多個語句。該區塊是由一對大括號分隔。express

break

終止當前的循環,switch,label 語句,使程序跳到下一個語句執行。segmentfault

continue

終止執行當前或標籤循環的語句,直接執行下一個迭代循環。數組

Empty

空語句用來表示沒有語句的狀況,儘管 JavaScript 語法指望有語句提供。瀏覽器

if...else(經常使用~)

若是指定的條件是 true ,則執行相匹配的一個語句,若爲 false,則執行另外一個語句。閉包

  • 語法函數

    if (condition) {
       statements1
    } else {
       statements2
    }

condition值爲 true 或 false 的表達式this

statement1若是條件值爲 true 時執行的語句。可爲任意語句,包括更深層的內部 if 語句。要執行多條語句,使用語句塊 ({ ... }) 將這些語句分組;若不想執行語句,則使用空語句。debug

statement2若是條件值爲 false 且 else 從句存在時執行的語句。可爲任意語句,包括語句塊和更深層的內部 if 語句。調試

  • 注意:全部不是 undefined,null, 0,NaN, 空字符串 (""), 以及任意對象,包括值爲false的Boolean對象, 在條件語句中都爲true。code

    var b = new Boolean(false);
    if (b) //表達式的值爲true

switch(經常使用~)

計算表達式,將子句於表達式的值作匹配,執行與該值相關聯的語句。

  • 語法

    switch (expression) {
     case value1:
    // 當 expression 的結果與 value1 匹配時,今後處開始執行
    statements1;
    [break;]
     case value2:
    // 當 expression 的結果與 value2 匹配時,今後處開始執行
    statements2;
    [break;]
     ...
     case valueN:
    // 當 expression 的結果與 valueN 匹配時,今後處開始執行
    statementsN;
    [break;]
     default:
    // 若是 expression 與上面的 value 值都不匹配時,執行此處的語句
    statements_def;
    [break;]
    }

expression一個用來與 case 子語句匹配的表達式。

case expressionN case 子語句,用來與 expression 匹配。

statementsN 若是 expression 匹配其對應的 case 子語句,則執行此處的語句。

statements_def 若是 expression 沒有匹配到任何 case 子語句,則會執行此處的語句。

throw

拋出一個用戶自定義的異常。

try...catch

標記一個語句塊,並指定一個應該拋出異常的反饋。

聲明

var(經常使用~)

聲明一個變量,可同時初始化。

  • 語法

    var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

varnameN 變量名。變量名能夠定義爲任何合法標識符。
valueN 變量的初始化值。該值能夠爲任何合法表達式。

  • 注意:

    • 聲明變量的做用域限制在其聲明位置的上下文中,而非聲明變量老是全局的。

      function x() {
        y = 1;   // 在嚴格模式(strict mode)下會拋出ReferenceError異常。
        var z = 2;
      }
      x();    
      console.log(y); // 打印"1" 。
      console.log(z); // 拋出ReferenceError: z未在x外部聲明。
    • 聲明變量在任何代碼執行前建立,而非聲明變量只有在執行賦值操做的時候纔會被建立。

      console.log(a); // 拋出ReferenceError。
      console.log('still going...'); // 永不執行。
      
      var a;
      console.log(a);// 打印"undefined"或""(不一樣瀏覽器實現不一樣)。
      console.log('still going...'); // 打印"still going..."。
    • 聲明變量是它所在上下文環境的不可配置屬性(non-configurable property),非聲明變量是可配置的(例如非聲明變量能夠被刪除)。

      var a = 1;
      b = 2;
      delete this.a; // 在嚴格模式(strict mode)下拋出TypeError,其餘狀況下執行失敗並沒有任何提示。
      delete this.b;
      console.log(a, b); // 拋出ReferenceError。
      // 'b'屬性已經被刪除。

let(ES6)

聲明一個塊級本地變量,能夠同時初始化。

const(ES6)

聲明一個只讀的命名常量

函數和類

function(經常使用~)

聲明一個指定參數的函數。

  • 語法

    function name([param,[, param,[..., param]]]) {
       [statements]
    }

name 函數名

param 傳遞給函數的參數。一個函數最多有255個參數

statements 函數體

  • 注意:一個被函數聲明建立的函數是一個 Function 對象,具備 Function 對象的全部屬性、方法和行爲。函數也能夠被表達式建立(二者區別在於函數聲明提高,函數表達式不能提高)

    hoisted(); // logs "foo"
    function hoisted() {
      console.log("foo");
    }    
    //注意 function expressions 不會提高:
    notHoisted(); // TypeError: notHoisted is not a function
    var notHoisted = function() {
       console.log("bar");
    };

Function*

構造函數使迭代器更容易使用。

return(經常使用~)

指定函數的返回值。

  • 語法

    return [[expression]];

expression 被返回的表達式。若是忽略,則返回 undefined。

  • 用途1:中斷一個函數的執行(用途2:閉包.默認狀況下,函數是返回 undefined 的。想要返回一個其餘的值,函數必須經過一個 return 語句指定返回值。關於閉包,參見 深刻淺出Javascript:閉包

    function counter() {
     for (var count = 1; ; count++) {  // 無限循環
    console.log(count + "A"); // 執行5次
      if (count === 5) {          
        return;
      }
      console.log(count + "B");  // 執行4次
    }
     console.log(count + "C");  // 永遠不會執行
    }
    
    counter();
    
    // Output:
    // 1A
    // 1B
    // 2A
    // 2B
    // 3A
    // 3B
    // 4A
    // 4B
    // 5A

class(ES6)

聲明一個類。

迭代器

do...while

建立一個循環來執行語句,直到該語句條件表達式的值爲false。先執行語句,再執行條件表達式,該語句至少會執行一次。

for(經常使用~)

建立一個由3個可選的表達式組成的循環,該循環用括號包裹,分號分割,並在循環體中執行語句。

  • 語法

    for ([initialization]; [condition]; [final-expression])
      statement

initialization 一個表達式 (包含賦值語句) 或者變量聲明。典型地被用於初始化一個計數器。該表達式可使用var關鍵字聲明新的變量。初始化中的變量不是該循環的局部變量,而是與該循環處在一樣的做用域中。該表達式的結果無心義。

condition 一個條件表達式被用於肯定每一次循環是否能被執行。若是該表達式的結果爲true, 循環體內的語句將被執行。 這個表達式是可選的。若是被忽略,那麼就被認爲永遠爲true。若是計算結果爲false,那麼執行流程將被跳到for語句結構後面的第一條語句。

final-expression 每次循環的最後都要執行的表達式。執行時機是在下一次condition的計算以前。一般被用於更新或者遞增計數器變量。

statement 只要condition的結果爲true就會被執行的語句。 要在循環體內執行多條語句,使用一個 block 結構 ({ ... }) 來包含要執行的語句。沒有任何語句要執行,使用一個 empty 語句 (;)。

  • 注意:for語句的全部的表達式都是可選的。固然能夠忽略全部的表達式。一樣的,確保使用了 break 語句來退出循環而且你還須要修改(遞增)一個變量,以確保可以正常執行break語句。

    var i = 0;
    for (;;) {
      if (i > 3) break;
      console.log(i);
      i++;
    }

for each...in(不建議使用)

經過指定的變量迭代對象全部屬性的值。針對每一個惟一的屬性,會執行指定的語句塊。

for...in

無序遍歷對象的可枚舉屬性。語句針對每一個惟一的屬性。

for...of(ES6)

遍歷可迭代的對象 (包括arrays, 類數組對象, iterators and generators),對每一個不一樣屬性的屬性,調用一個自定義的有執行語句的迭代鉤子。

while

建立一個循環語句,循環會一直持續到該語句條件表達式的值爲false。先執行條件表達式,而後執行語句。

其餘

debugger

調用可用的調試功能。若是沒有調試功能可用,該語句不生效。

export

用來導出函數,以便這些函數可以被導入到外部模塊或其餘script中。

import(ES6)

用來引入外部的模塊或另外一個script中導出的函數。

label

帶標識的語句,與break或continue語句一塊兒使用。

with(不建議使用)

拓展一個語句的做用域。

相關文章
相關標籤/搜索