跳轉到內容

JavaScript/簡介

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




JS 是一種實現國際標準 ECMAScript 的程式語言。它基於以下概念。

動態資料型別

JS 瞭解一些基本資料型別(數字、字串、布林值、BigInt、符號、未定義、空)以及資料型別物件的各種衍生物(陣列、日期、錯誤、函式、正則表示式)。[1] [2] 如果變數存在,它的型別定義明確。但型別可以在任何時候透過將不同型別的變數賦值給變數來更改,例如:程式碼片段let x; x = 'Some text'; x = 2; x = [10, 11, 12];是完全正確的。它不會建立編譯時或執行時錯誤。只有變數x的型別從未定義變為字串,再變為數字,最後變為物件/陣列

(注意:JSON 是一種基於文字的資料格式,而不是資料型別。因此,它是語言無關的。它使用 JavaScript 物件語法。)

函數語言程式設計

函式是類似於變數的一等公民。它們可以被賦值給變數,作為引數傳遞給其他函式,或者從函式中返回。程式碼片段function sayHello() {return 'Good morning'};let x = sayHello; console.log(x());建立了一個函式sayHello,將其賦值給變數x,並透過呼叫x()執行它。

面向物件程式設計

JS 透過原型支援面向物件程式設計和繼承。原型是一個可以克隆和擴充套件的物件。這樣做會產生一個原型鏈。這與其他面嚮物件語言(如 Java)不同,Java 使用來實現面向物件特性,例如繼承。然而,在語法層面上,JS 中可以使用。但這只是“語法糖”。在幕後,JS 使用原型機制。

C 語言風格語法

JS 語法與 C、Java 或 C 系列的其他成員非常相似。但我們必須始終考慮到概念和執行時行為有明顯區別。

與 Java 的關係

除了具有 C 語言風格語法外,JS 與 Java 沒有任何關係。為了避免可能的混淆,我們想清楚地強調 JS 和 Java 之間的一些區別。

最初,Netscape 開發了 JavaScript,而Sun Microsystems 開發了 Java。Java 包括類和物件例項,而 JavaScript 使用原型。在 Java 中,變數必須在使用之前宣告,這在 JS 中是不必要的(但不推薦)。

在 Java 中,變數具有不可變的靜態型別(例如intString),在執行程式的整個生命週期中保持不變。在 JS 中,它們也有型別(例如NumberString),但這種型別可以在執行程式的生命週期中發生變化。型別是從環境中檢測到的。因此,顯式定義型別既沒有必要也不可能。

int x = 0;          // Java: 'name of type', 'name of variable', ...
let x = 0;          // JS: 'let' or 'const', 'name of variable', ... 
                    //     The type will be 'Number' because of the right side of the equal sign.
let x = String (0); // JS: explicit change from 'Number' to 'String' BEFORE assignment to x
                    //     The type will be 'String'. Test it with: alert(typeof x)

JS 引擎

JS 可以執行在客戶端,也可以執行在伺服器端。JS 的早期版本在充當簡單直譯器的瀏覽器中執行。如今,該語言由即時編譯器(JIT)處理。它們解析指令碼,建立抽象語法樹(AST),最佳化樹,從 AST 生成特定於 JIT 的位元組碼,從位元組碼生成特定於硬體的機器程式碼,並將機器程式碼投入執行。此類即時編譯器不僅存在於瀏覽器中。它們也可以是其他應用程式的一部分,例如:主要用 C++ 編寫的node.js

廣泛使用的 JS 引擎是

  • V8 來自 Google:Google Chrome、Electron、Chromium、node.js
  • SpiderMonkey 來自 Mozilla、Firefox
  • JavaScriptCore 來自 Apple、Safari
  • ActionScript 來自 Adobe、Flash

參考文獻

華夏公益教科書