JavaScript 簡介

儘管其名稱不同,JavaScript 只與 Java 相關,因為兩者都共用 語法相似處一開始,JavaScript 的語法 偏見受到 Java 語法的啟發,稱為「LiveScript」第一次 於 1995 年推出 Netscape Navigator 測試版,兩者皆是為了配合 表示 Netscape 和其他已命名產品/服務經營「線上」的事實加以表揚 。Microsoft 發布了自己的 JavaScript 實作。 「JScript」Internet Explorer 3.0 才會開始支援此功能。

Netscape 將這項早期作業提交至 Ecma International: 制定並公布技術標準, 其他瀏覽器應該能理解指令碼語言。1997 年,Ecma 國際發行的 ECMA-262,將第一版腳本標準化 ECMAScriptECMAScript 是決定建立廣告的標準 更加具體的指令碼語言 例如 Microsoft 之後會負責 現在已經淘汰 JScript、Adobe 的 ActionScript 和 JavaScript 本身。

如要討論 JavaScript。「ES5」是指第一大「版本化」 2009 年 ECMAScript 標準,歷經數年的骨質發展。 「ES6」(簡稱「ES2015」) 是第六版 ECMAScript,於 2015 年推出。在 ES6 之後,新版 ECMAScript Standard 的發布時間是每年發布一次,且會分別反映每個版本的異動和新增項目 稱為「ES2016」的年份或「ES2017」

基本規則

與編譯語言不同,JavaScript 不會從使用者撰寫的程式碼翻譯而成 然後為瀏覽器能理解的格式將指令碼傳送至瀏覽器 連同標記、圖片和樣式表等素材資源,瀏覽器會解讀這類檔案 相同的寫法:這就是人類可讀的萬國碼 (Unicode) 字元序列 剖析方式為由左至右,由上而下。

JavaScript 解譯器接收指令碼後,會先執行 詞法分析,剖析組成指令碼的一長串字元 並將其轉換為下列獨立的輸入元素:

  • 詞元
  • 格式控製字元
  • 行結束字元
  • 留言
  • 空白字元 (幾乎 一律代表 Tab 和空格)。

重新載入或離開頁面後,系統不會保留指令碼的結果 ,除非您明確明確指示在 建立指令碼

整體而言,JavaScript 應用程式是由「陳述式」expressions

聲明

陳述式是指由一或多行程式碼組成的指令單位, 都代表動作舉例來說,您可以使用以下陳述式進行指派 將值新增至名為 myVariable 的變數:

let myVariable = 4;

myVariable;
> 4

陳述式的結尾必須是分號,系統才能正確解讀。不過, 編寫 JavaScript 時不一定要使用分號。稱為 自動插入分號:可讓您換行 在完整陳述式之後中斷 分號會導致錯誤發生。

ASI 是指錯誤修正,而不是 JavaScript 本身的權限。由於 過度依賴這項錯誤修正會造成混淆 程式碼,仍應手動以半形分號為每個陳述式結尾。

區塊陳述式

區塊陳述式會將任意數量的陳述式和宣告組合成組合 括號 ({})。這項功能可讓您將陳述式結合到 JavaScript 的位置 只會有一項

你會最常在旁邊看到區塊陳述式 控制流程陳述式 例如 if

if ( x === 2 ) {
  //some behavior;
}

運算式

運算式是會產生值的程式碼單位,因此可能會 在預期內使用任何值的位置。2 + 2 是一種運算式,會產生 值 4

2 + 2;
> 4

「群組運算子」是一組與括號相符的括號 組合運算式,確保運算式的一部分 會視為單一單元進行評估舉例來說,您可能會使用分組運算子 覆寫運算順序, 或提升程式碼的可讀性:

2 + 2 * 4;
> 10

( 2 + 2 ) * 4;
> 16

let myVariable = ( 2 + 2 );

myVariable;
> 4

打字較弱

JavaScript 是一種輕微類型的語言,意味著資料值不需要 明確標示為特定資料類型 有別於高度輸入的語言,JavaScript 可以根據 並將值轉換為該類型。這項程序稱為 type coercion

舉例來說,如果你以強類型語言將數字新增至字串值, 則會導致錯誤:

>>> "1" + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

JavaScript 會將數字值強制轉換為字串,而不會傳回錯誤 並串連這兩個值,當 將任何值轉換為字串:

"1" + 1;
> "11"

資料類型也可以明確強制轉換。以下範例強制轉換 使用 JavaScript 的內建功能將數值 100 設為 "100" 的字串值 toString 方法:

let myVariable = 100;

typeof myVariable;
> "number"

myVariable = myVariable.toString();
> "100"

typeof myVariable;
> "string"

區分大小寫

有別於 HTML 和大部分的 CSS,JavaScript 本身都區分大小寫。 因此,您必須一律一致地將所有內容大寫,包括 為您定義的 ID 內建的屬性和方法 你自己。

console.log( "Log this." );
> Log this.

console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;

myvariable;
> Uncaught ReferenceError: myvariable is not defined

myVariable;
> 2

空白字元

JavaScript 不區分大小寫。這表示解譯器會忽略 空格的數量和類型 (定位點或空格)

                     console.log(       "Log this"  );console.log("Log this too");
> "Log this."
> "Log this too."

空白字元的情況可能很重要 詞法認證:

let x;

[符記[let] [x] ]

letx;
> Uncaught ReferenceError: letx is not defined

[符記[letx] ]

使用空白字元分隔有意義的詞語符記時,剖析器 會忽略空白字元的數量和類型:

let           x                             =                           2;

[符記[let] [x] [=] [2] ]

換行符號也是如此,但在某些情況下,可以換行 導致問題提前結束陳述式):

let x
=
2;

[符記[let] [x] [=] [2] ]

像平常一樣,某些類型的陳述常會佔據一行:

let x = 1;
let y = 2;

有些陳述式通常會使用多行:

if ( x == 2 ) {
  //some behavior;
}

不過,這些慣例僅為確保內容可讀性。JavaScript 以上範例的解釋方式如下:

let x=1;let y=2;
if(x==2){}

因此,這套自動化程序會從 準備 JavaScript 時,可縮減傳輸大小的指令碼檔案是很常見的步驟 執行多項最佳化作業

在 JavaScript 中使用空白字元主要是取決於作者 維護人員偏好設定有多個開發人員的 JavaScript 專案 貢獻的程式碼常會建議或強制執行特定空白字元慣例 確保程式碼格式一致,例如使用 Tab 鍵或空格 使用縮排巢狀陳述式:

let myVariable = 10;

if ( typeof myVariable === "number" ) {
    console.log( "This variable is a number." );
    if( myVariable > 5 ) {
     console.log( "This variable is greater than five." );
    }
}

> "This variable is a number."
> "This variable is greater than five."

隨堂測驗

什麼是運算式?

一組聲明和宣告。
產生值的程式碼單位。
說明程式碼用途的註解。

JavaScript 有大小寫之分,