跳轉到內容

JavaScript/詞法結構

來自華夏公益教科書,開放的書籍,構建開放的世界



  • 語言中的所有元素都區分大小寫,例如:const x = 0; const X = 0; 定義了兩個不同的變數;CONST x = 0; 會導致語法錯誤。
  • 單行註釋以 // 開頭。多行註釋用 /* */ 括起來。
  • 語句末尾的分號是可選的 - 除了少數例外。
  • 變數名的第一個字元不能是數字:const 1x = 0; 會導致語法錯誤。


區分大小寫

[編輯 | 編輯原始碼]

JavaScript 區分大小寫。這意味著所有關鍵字、變數名和函式名必須一致地書寫。如果你建立一個函式 Hello(),它與函式 HELLO()hello()hEllo() 不同。或者,語句 IF (x > 0) { } 會導致語法錯誤,因為關鍵字 if 是小寫定義的。

空白符

[編輯 | 編輯原始碼]

空白符包括空格、製表符和換行符。[註釋 1] 如果存在多個空白符的序列,JavaScript 會將它們縮減為一個空白符,例如:'    ' -> ' ','\n\t' -> '\n'。這個剩下的單個空白符用於將語言元素(如關鍵字和變數名)彼此分隔。對於人類來說,這樣生成的原始碼難以閱讀[2],但對於瀏覽器來說(稍微)更容易解析。主要優勢是程式碼的大小更小,需要在伺服器和客戶端之間傳輸。

以下指令碼是一個空白符很少的示例。

function filterEmailKeys(event){
event=event||window.event;
const charCode=event.charCode||event.keyCode;
const char=String.fromCharCode(charCode);
if(/[a-zA-Z0-9_\-\.@]/.exec(char)){return true;}
return false;
}

以下是具有典型空白符數量的相同指令碼。

以下是具有典型空白符數量的相同指令碼。

function filterEmailKeys(event) {
  event = event || window.event;
  const charCode = event.charCode || event.keyCode;
  const char = String.fromCharCode(charCode);
  if (/[a-zA-Z0-9_\-\.@]/.exec(char)) {
    return true;
  }
  return false;
}

以下是具有大量空白符的相同指令碼。

function filterEmailKeys( evt ) {

    evt = evt || window.event;

    const charCode = evt.charCode || evt.keyCode;
    const char = String.fromCharCode ( charCode );

    if ( /[a-zA-Z0-9_\-\.@]/.exec ( char ) ) {
        return true;
    }

    return false;
  }

註釋是原始碼的一部分,根據定義 - 不會被執行。

它們允許你在程式碼中留下注釋以幫助其他人理解它。它們還允許你註釋掉你想要隱藏在解析器之外但不想刪除的程式碼。

單行註釋

雙斜槓 // 會將同一行上的所有後續文字轉換為註釋,這些註釋不會被 JavaScript 直譯器處理。

// Show a welcome message
alert("Hello, World!")
多行註釋

多行註釋以 /* 開頭,並以相反的 */ 結尾。多行註釋不會巢狀。

以下是如何使用不同型別的註釋技術的示例。

/* This is a multi-line comment
that contains multiple lines
of commented text. */
let a = 1;
/* commented out to perform further testing
a = a + 2;
a = a / (a - 3); // is something wrong here?
*/
alert('a: ' + a);

/* This comment has two /* but they're both canceled out by */

在許多程式語言中,每個程式碼語句的末尾都需要分號。在 JavaScript 中,分號的使用是可選的,因為換行符表示語句的結束(除了一些例外)。這被稱為 自動分號插入

// the line 
x = a + b;
// is equivalent to:
x = a + b

但是,這些例外可能令人驚訝。[3] 自動分號插入可能會導致難以除錯的問題。

a = b + c
(d + e).print()

上面的程式碼不會被解釋為兩個語句。由於第二行上的括號,JavaScript 會將上面的程式碼解釋為

a = b + c(d + e).print();

而你可能本意是將其解釋為

a = b + c;
(d + e).print();

即使分號是可選的,最好在語句末尾加上分號,以防止出現任何誤解。

字面量

[編輯 | 編輯原始碼]

字面量是一個硬編碼的值。字面量提供了一種在指令碼中表達特定值的方法。例如,在等號右邊

const myLiteral = "a fixed value";

有幾種型別的字面量可用。最常見的是字串字面量,但還有數字字面量、布林值、未定義、空值、正則表示式字面量、陣列字面量和物件字面量。

物件、布林值和字串字面量的示例

const myObject = { name:"value", anotherName:"anotherValue" };
const isClosed = true;
const mayBeWrong = "true";

這些不同型別的詳細資訊將在 變數和型別 中介紹。

識別符號

[編輯 | 編輯原始碼]

識別符號是資料片段(如變數、陣列或函式)的名稱。有一些規則

  • 識別符號中允許使用字母、美元符號、下劃線和數字。
  • 第一個字元不能是數字。

有效識別符號的示例

  • u
  • $hello
  • _Hello
  • hello90

1A2B3C 是一個無效的識別符號,因為它以數字開頭。

“識別符號”的一個例子是變數名。它們遵循這樣的規則。

  • 可以使用大寫和小寫字母、下劃線和美元符號。
  • 數字可以在第一個字元之後使用。
  • 只要它們分別具有“ID_Start”或“ID_Continue”的 Unicode 屬性,就可以在變數名中使用非拉丁字元(如“á”)。[4] 不允許使用特殊字元。
  • 變數名區分大小寫:不同的情況意味著不同的名稱。
  • 變數不能是保留字。
... 在另一個頁面上提供(點選這裡)。
  1. 從技術上講,垂直製表符、零寬度不間斷空格以及任何具有“空格分隔符”類別的 Unicode 字元也都算作空白符。[1]

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書