程式入門
- 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。