2022 年 8 月 8 日

JavaScript 簡介

讓我們看看 JavaScript 有什麼特別之處,我們可以用它來做什麼,以及還有哪些其他技術可以與它搭配使用。

什麼是 JavaScript?

JavaScript 最初是為了「讓網頁動起來」而創建的。

這種語言的程式稱為指令碼。它們可以直接寫在網頁的 HTML 中,並在網頁載入時自動執行。

指令碼以純文字提供並執行。它們不需要特別準備或編譯才能執行。

在這個方面,JavaScript 與另一種稱為 Java 的語言非常不同。

為什麼它被稱為JavaScript?

JavaScript 在創建之初,最初有一個不同的名稱:「LiveScript」。但當時 Java 非常流行,因此決定將一種新語言定位為 Java 的「小兄弟」將會有幫助。

但隨著它的演進,JavaScript 成為了一種完全獨立的語言,擁有自己的規範,稱為 ECMAScript,現在它與 Java 完全沒有關係。

如今,JavaScript 不僅可以在瀏覽器中執行,還可以在伺服器上執行,或者實際上可以在任何具有稱為 JavaScript 引擎 的特殊程式的裝置上執行。

瀏覽器有一個內嵌引擎,有時稱為「JavaScript 虛擬機器」。

不同的引擎有不同的「代號」。例如

  • V8 – 在 Chrome、Opera 和 Edge 中。
  • SpiderMonkey – 在 Firefox 中。
  • …還有其他代號,例如 IE 的「Chakra」、Safari 的「JavaScriptCore」、「Nitro」和「SquirrelFish」等。

最好記住上述術語,因為它們用於網際網路上的開發人員文章。我們也會使用它們。例如,如果「功能 X 受 V8 支援」,那麼它可能在 Chrome、Opera 和 Edge 中運作。

引擎如何運作?

引擎很複雜。但基礎知識很容易。

  1. 引擎(如果它是瀏覽器,則為內嵌)會讀取(「解析」)腳本。
  2. 然後它會將腳本轉換(「編譯」)為機器碼。
  3. 然後機器碼會執行,非常快。

引擎會在流程的每個步驟套用最佳化。它甚至會在執行時觀察編譯的腳本,分析流經它的資料,並根據該知識進一步最佳化機器碼。

瀏覽器內 JavaScript 可以做什麼?

現代 JavaScript 是一種「安全的」程式語言。它不提供對記憶體或 CPU 的低階存取,因為它最初是為不需要它的瀏覽器所創建的。

JavaScript 的功能在很大程度上取決於它執行的環境。例如,Node.js 支援允許 JavaScript 讀取/寫入任意檔案、執行網路要求等功能。

瀏覽器內 JavaScript 可以執行與網頁操作、與使用者互動以及網路伺服器相關的所有事項。

例如,瀏覽器內 JavaScript 能夠

  • 將新的 HTML 加入頁面、變更現有內容、修改樣式。
  • 對使用者的動作做出反應,在滑鼠點擊、指標移動、按鍵按下時執行。
  • 透過網路向遠端伺服器傳送要求、下載和上傳檔案(所謂的 AJAXCOMET 技術)。
  • 取得和設定 cookie、向訪客詢問問題、顯示訊息。
  • 記住客戶端(「本地儲存」)上的資料。

瀏覽器中的 JavaScript 不能做什麼?

JavaScript 在瀏覽器中的功能受到限制,以保護使用者的安全。目的是防止惡意網頁存取私人資訊或損害使用者的資料。

此類限制的範例包括

  • 網頁上的 JavaScript 可能無法讀取/寫入硬碟上的任意檔案、複製檔案或執行程式。它無法直接存取作業系統功能。

    現代瀏覽器允許它處理檔案,但存取受到限制,而且僅在使用者執行特定動作時提供,例如將檔案「拖放」到瀏覽器視窗或透過 <input> 標籤選取檔案。

    有方法可以與相機/麥克風和其他裝置互動,但它們需要使用者的明確許可。因此,啟用 JavaScript 的網頁可能無法偷偷啟用網路攝影機、觀察周遭環境,並將資訊傳送給 國家安全局

  • 不同的分頁/視窗通常不知道彼此。有時它們會知道,例如當一個視窗使用 JavaScript 開啟另一個視窗時。但即使在這種情況下,如果 JavaScript 來自不同的網站(不同的網域、通訊協定或埠),JavaScript 可能無法存取另一個網頁。

    這稱為「同源政策」。要解決這個問題,兩個網頁 都必須同意交換資料,並且必須包含處理它的特殊 JavaScript 程式碼。我們將在教學課程中介紹這一點。

    這個限制再次是為了使用者的安全。使用者開啟的來自 http://anysite.com 的網頁不應能夠存取 URL 為 http://gmail.com 的另一個瀏覽器分頁,例如,並從那裡竊取資訊。

  • JavaScript 可以輕鬆透過網路與當前網頁所在的伺服器通訊。但它從其他網站/網域接收資料的能力受到限制。雖然有可能,但需要遠端明確同意(在 HTTP 標頭中表示)。再次強調,這是一個安全限制。

如果 JavaScript 在瀏覽器外使用,例如在伺服器上,就不存在此類限制。現代瀏覽器也允許外掛程式/擴充功能,這些程式/擴充功能可能會要求擴充許可權。

是什麼讓 JavaScript 獨一無二?

JavaScript 至少有三個優點

  • 與 HTML/CSS 完全整合。
  • 簡單的事情用簡單的方法完成。
  • 所有主流瀏覽器都支援,且預設啟用。

JavaScript 是唯一結合這三項優點的瀏覽器技術。

這就是讓 JavaScript 獨一無二的原因。這就是它成為建立瀏覽器介面的最廣泛工具的原因。

話雖如此,JavaScript 可用於建立伺服器、行動應用程式等。

「凌駕」JavaScript 的語言

JavaScript 的語法並非能滿足所有人的需求。不同的人需要不同的功能。

這是可以預期的,因為每個人的專案和需求都不同。

因此,最近出現了許多新語言,它們會在瀏覽器中執行之前轉譯(轉換)為 JavaScript。

現代工具讓轉譯變得非常快速且透明,實際上允許開發人員使用另一種語言編寫程式碼,並在「幕後」自動轉換它。

此類語言的範例

  • CoffeeScript 是 JavaScript 的「語法糖」。它引入了較短的語法,讓我們可以撰寫更清晰、更精確的程式碼。通常,Ruby 開發人員喜歡它。
  • TypeScript 專注於新增「嚴格資料型別」,以簡化複雜系統的開發和支援。它是由 Microsoft 開發的。
  • Flow 也新增了資料型別,但方式不同。由 Facebook 開發。
  • Dart 是一種獨立語言,有自己的引擎,可以在非瀏覽器環境(例如行動應用程式)中執行,但也可以轉譯為 JavaScript。由 Google 開發。
  • Brython 是 Python 轉譯器,可轉譯為 JavaScript,讓你可以使用純 Python 撰寫應用程式,而無需 JavaScript。
  • Kotlin 是一種現代、簡潔且安全的程式語言,可以針對瀏覽器或 Node。

還有更多。當然,即使我們使用其中一種轉譯語言,我們也應該了解 JavaScript,才能真正了解我們在做什麼。

摘要

  • JavaScript 最初是作為瀏覽器專用語言建立的,但現在也用於許多其他環境中。
  • 現今,JavaScript 擁有獨特的地位,作為最廣泛採用的瀏覽器語言,並與 HTML/CSS 完全整合。
  • 有許多語言會「轉譯」成 JavaScript,並提供特定功能。建議在精通 JavaScript 之後,至少簡要地了解它們。
教學課程地圖

留言

留言前請閱讀此處…
  • 如果您有改進建議,請 提交 GitHub 議題 或提交拉取請求,而不是留言。
  • 如果您無法理解文章中的內容,請詳述。
  • 若要插入少數幾個字元的程式碼,請使用 <code> 標籤;若要插入多行程式碼,請將其包覆在 <pre> 標籤中;若要插入超過 10 行程式碼,請使用沙盒 (plnkrjsbincodepen…)