專為中學生寫的 JavaScript 程式書

程式入門

    • JavaScript程式語言可以用來編寫網站的前端(目前是唯一可在瀏覽器中執行的語言)和後端程式。

    • 會撰寫前端和後端程式的軟體工程師,稱為全端工程師(full stack engineer)。

    • Node.js是一種JavaScript開發工具,主要用來開發網站的伺服器端。

    • 採用UTF8編碼才可以正常顯示繁體中文,使用ANSI則不能。

    • Node.js預設採用UTF8編碼。

基本語法

    • 基本變數型態、相關函式語法、流程控制語法。

陣列與字串

    • 索引的使用。

    • 相關基本函式的使用。

    • 字串可以根據索引取得特定字元。

函數

    • 宣告並定義函數,以重複使用程式碼。

    • 函數可以採用直接宣告、定義,在JavaScript中也可以用變數連結函數(亦即"匿名函數"),欲呼叫函數時,直接呼較使用該變數並給予所需的參數即可。

    • 對於函數參數的傳遞,基本型態的參數採用call by value,物件型態的參數則採用call by reference。

    • 函數可以當作參數,供另一個函數使用。可以藉此實現呼叫不特定函數、callBack(回呼,執行完特定步驟後再呼叫執行該函數)。

字典與JSON

    • Dictionary(字典),屬於較高階的資料結構,主要為key/value的配對。

    • Dictionary可以為單層或多層結構。Value為Dictonary資料結構時,即為多層結構。

    • JSON(全名為Javascript Object Notation),採用{…}和[…]等簡單的語法產生可供使用的物件,較傳統的網路交換格式XML更方便資料的交換,傳遞相同資料內容所需的網路傳輸量也較小。

    • 物件是JavaScript的核心,以{ }進行宣告和定義。

物件導向與原型(prototype)

    • 在 log() 函數中使用 %j 的格式,代表要將該物件以JSON 的方式印出來。(如:A.log(“k=%j", k); )

    • 物件可以連續使用".",連續呼叫執行多個函數。

    • 可以採用Object.create()或new的方式產生新物件。

    • 採用prototype的方式宣告變數成員或函數,使得相同類型的物件可以共用變數、函數,而不需讓重複的內容占用記憶體。(若不使用prototype,每產生一次物件,該物件的記憶體皆會包含相關的函數和變數)。個人認為這種做法和C#的static宣告意義相同。

    • 在原型中可再加入原型,可以藉此實現類似物件導向的"繼承"效果。

函式庫

    • 瀏覽JavaScript標準函式庫,以大致了解有哪些函數可供使用。

    • 瀏覽Node.js函式庫,以大致了解有哪些函數可供使用。

    • 藉由Node.js官方套件管理器-npm(node package manager),可以用來安裝、管理、發佈套件。目前已發佈數十萬種套件,可搜尋所需的功能套件並安裝使用。

模組

    • 在JavaScript中,模組可以是物件(物件本身可能同時包含"變數成員"和"函數")或函數,可以將模組分享給其他程式使用。

    • Node.js中,模組的定義分為匯出"物件"的靜態模組、匯出"建構函數"的動態模組。

    • 要匯出模組者,需使用"module.exports"語法。

    • 要引用模組者,需使用"require"語法和"相對路徑"。

    • 可以使用"建構函數"產生物件。

    • 採用跨平台相容的模組匯出寫法,使得瀏覽器、node.js、CommonJS 與其 Asynchronous Module Definition (AMD) 實作版的 RequireJS都可以使用該模組。

    • 安裝、使用、發佈npm套件基本介紹。

檔案與標準(鍵盤/螢幕)輸出入

    • JavaScript語言一開始是直接內嵌在"網頁"使用,因此標準函式庫中沒有檔案輸出入的相關函數。

    • Node.js提供了檔案輸出入的函數,預設為非阻斷式(Non-blocking)、非同步式(nonsynchronize)、大量使用回呼函數(callback function)的方式,因此即使未寫成multi-thread或multi-process的寫法也會有較高的效能,但程式碼的可讀性較差。

資料庫

    • 安裝mongo DB。

    • 資料庫的CRUD(Create、Read、Update、Delete)相關語法。

    • 在程式中使用mongo DB。

網路

    • 使用fs、http、URIjs等套件,產生網頁爬蟲、聊天室(server-client架構)網路程式範例。

完整案例 RLab

    • 因為有開源程式碼可供使用,可善用外部函式庫、軟體,組合出我們想要的系統。

    • 在科學計算領域,目前有商業軟體matlab、用R/Octave/Python語言撰寫的numpy, scipy等開放原始碼軟體。

    • 分享實作JavaScript的科學計算套件RLab.js之經驗。

    • 科學計算軟體通常需要有"矩陣"和"機率統計"功能,因此採用了numeric.js(矩陣套件)和jstat.js(統計套件),進而組合成科學計算套件RLab.js。

學習資源