簡介

本章介紹 JavaScript 並討論其一些基本概念。

你應該已經知道的內容

本指南假定你具備以下基礎知識

  • 對網際網路和全球資訊網 (WWW) 有大致瞭解。
  • 熟練掌握超文字標記語言 (HTML)。
  • 一些程式設計經驗。如果你是程式設計新手,請嘗試 JavaScript 主頁上鍊接的其中一個教程。

在哪裡可以找到 JavaScript 資訊

MDN 上的 JavaScript 文件包括以下內容

什麼是 JavaScript?

JavaScript 是一種跨平臺、面向物件的指令碼語言,用於使網頁具有互動性(例如,複雜的動畫、可點選的按鈕、彈出選單等)。還有更高階的伺服器端 JavaScript 版本,例如 Node.js,它允許你為網站新增比下載檔案更多的功能(例如多個計算機之間的即時協作)。在宿主環境(例如,Web 瀏覽器)中,JavaScript 可以連線到其環境的物件,以提供對它們的程式化控制。

JavaScript 包含一個標準的物件庫,例如 ArrayMapMath,以及一組核心語言元素,例如運算子、控制結構和語句。核心 JavaScript 可以透過補充額外的物件來擴充套件,以用於各種目的;例如

  • 客戶端 JavaScript 透過提供控制瀏覽器及其文件物件模型(DOM)的物件來擴充套件核心語言。例如,客戶端擴充套件允許應用程式將元素放置在 HTML 表單上,並響應使用者事件,例如滑鼠點選、表單輸入和頁面導航。
  • 伺服器端 JavaScript 透過提供與在伺服器上執行 JavaScript 相關的物件來擴充套件核心語言。例如,伺服器端擴充套件允許應用程式與資料庫通訊,提供從應用程式的一個呼叫到另一個呼叫的資訊連續性,或在伺服器上執行檔案操作。

這意味著在瀏覽器中,JavaScript 可以改變網頁(DOM)的外觀。同樣,伺服器上的 Node.js JavaScript 可以響應瀏覽器中執行的程式碼傳送的自定義請求。

JavaScript 和 Java

JavaScript 和 Java 在某些方面相似,但在另一些方面則根本不同。JavaScript 語言類似於 Java,但沒有 Java 的靜態型別和強型別檢查。JavaScript 遵循大多數 Java 表示式語法、命名約定和基本控制流結構,這就是它從 LiveScript 更名為 JavaScript 的原因。

與 Java 的宣告構建的編譯時類系統不同,JavaScript 支援一個基於少數代表數字、布林和字串值的資料型別的執行時系統。JavaScript 具有基於原型的物件模型,而不是更常見的基於類的物件模型。基於原型的模型提供動態繼承;也就是說,繼承的內容可以因單個物件而異。JavaScript 還支援不需要任何特殊宣告要求的函式。函式可以是物件的屬性,作為鬆散型別的方法執行。

與 Java 相比,JavaScript 是一種非常自由的語言。你無需宣告所有變數、類和方法。你無需擔心方法是公共的、私有的還是受保護的,也無需實現介面。變數、引數和函式返回型別沒有明確的型別。

Java 是一種基於類的程式語言,旨在實現快速執行和型別安全。型別安全意味著,例如,你不能將 Java 整數轉換為物件引用,也不能透過破壞 Java 位元組碼來訪問私有記憶體。Java 的基於類的模型意味著程式完全由類及其方法組成。Java 的類繼承和強型別通常需要緊密耦合的物件層次結構。這些要求使 Java 程式設計比 JavaScript 程式設計更復雜。

相比之下,JavaScript 的精神源自一系列較小、動態型別的語言,例如 HyperTalk 和 dBase。這些指令碼語言因其更簡單的語法、專門的內建功能和對物件建立的最低要求,為更廣泛的受眾提供了程式設計工具。

JavaScript Java
面向物件。物件型別之間沒有區別。繼承透過原型機制實現,屬性和方法可以動態新增到任何物件。 基於類。物件分為類和例項,所有繼承都透過類層次結構進行。類和例項不能動態新增屬性或方法。
變數資料型別不宣告(動態型別,鬆散型別)。 變數資料型別必須宣告(靜態型別,強型別)。
不能自動寫入硬碟。 可以自動寫入硬碟。

JavaScript 和 ECMAScript 規範

JavaScript 由 Ecma International(歐洲資訊和通訊系統標準化協會,ECMA 曾是歐洲計算機制造商協會的縮寫)標準化,旨在提供基於 JavaScript 的標準化國際程式語言。這個標準化版本的 JavaScript 稱為 ECMAScript,在所有支援該標準的應用程式中行為相同。公司可以使用開放標準語言來開發其 JavaScript 實現。ECMAScript 標準記錄在 ECMA-262 規範中。

ECMA-262 標準也獲得 ISO(國際標準化組織)批准,作為 ISO-16262。你也可以在 Ecma International 網站上找到該規範。ECMAScript 規範不描述文件物件模型(DOM),DOM 由 全球資訊網聯盟 (W3C) 和/或 WHATWG (Web 超文字應用技術工作組) 標準化。DOM 定義了 HTML 文件物件向你的指令碼公開的方式。要更好地瞭解使用 JavaScript 程式設計時使用的不同技術,請參閱文章 JavaScript 技術概述

JavaScript 文件與 ECMAScript 規範

ECMAScript 規範是一組實現 ECMAScript 的要求。如果你想在 ECMAScript 實現或引擎中(例如 Firefox 中的 SpiderMonkey 或 Chrome 中的 V8)實現符合標準的語言特性,它會很有用。

ECMAScript 文件旨在幫助指令碼程式設計師。編寫指令碼時請使用 JavaScript 文件獲取資訊。

ECMAScript 規範使用 JavaScript 程式設計師可能不熟悉的術語和語法。儘管語言的描述在 ECMAScript 中可能有所不同,但語言本身保持不變。JavaScript 支援 ECMAScript 規範中概述的所有功能。

JavaScript 文件描述了適合 JavaScript 程式設計師的語言方面。

JavaScript 入門

要開始使用 JavaScript,你只需要一個現代的 Web 瀏覽器。最新版本的 FirefoxChromeMicrosoft EdgeSafari 都支援本指南中討論的功能。

一個非常有用的 JavaScript 探索工具是 JavaScript 控制檯(有時稱為 Web 控制檯,或簡稱控制檯):這是一個允許你輸入 JavaScript 並在當前頁面中執行它的工具。

這裡的螢幕截圖顯示了 Firefox Web 控制檯,但所有現代瀏覽器都附帶了一個以類似方式工作的控制檯。

開啟控制檯

開啟控制檯的確切說明因瀏覽器而異

輸入並執行 JavaScript

控制檯顯示在瀏覽器視窗的底部。控制檯底部有一個輸入行,你可以用來輸入 JavaScript,輸出顯示在上面的面板中

A browser window with the web console open at the bottom, containing two lines of input and output. Text can be entered below that.

控制檯的工作方式與 eval 完全相同:返回最後輸入的表示式。為簡單起見,可以想象每次在控制檯中輸入內容時,它實際上都被 console.log 包裹在 eval 周圍,就像這樣

js
console.log(eval("3 + 5"));

控制檯中的多行輸入

預設情況下,如果你在輸入一行程式碼後按 Enter(或 Return,取決於你的鍵盤),則你鍵入的字串將被執行。要輸入多行輸入

  • 如果你鍵入的字串不完整(例如,你鍵入 function foo() {),則控制檯會將 Enter 視為換行符,並允許你鍵入另一行。
  • 如果你在按 Enter 的同時按住 Shift,則控制檯會將其視為換行符,並允許你鍵入另一行。
  • 僅在 Firefox 中,你可以啟用多行輸入模式,你可以在迷你編輯器中輸入多行,然後在準備好時執行整個程式碼。

要開始編寫 JavaScript,請開啟控制檯,複製以下程式碼,並將其貼上到提示符處

js
(function () {
  "use strict";
  /* Start of your code */
  function greetMe(yourName) {
    alert(`Hello ${yourName}`);
  }

  greetMe("World");
  /* End of your code */
})();

Enter 即可在瀏覽器中檢視其展開!

接下來是什麼

在接下來的頁面中,本指南將向你介紹 JavaScript 語法和語言功能,以便你能夠編寫更復雜的應用程式。

但現在,請記住始終在程式碼前包含 (function(){"use strict";,並在程式碼末尾新增 })();嚴格模式IIFE 文章解釋了它們的作用,但現在可以認為它們的作用如下

  1. 防止 JavaScript 中讓初學者感到困惑的語義。
  2. 防止在控制檯中執行的程式碼片段相互互動(例如,在一次控制檯執行中建立的內容被用於另一次控制檯執行)。