JavaScript 語言核心(1)重新開始


你可以在 Google PlayPubu 購買 JavaScript 語言核心系列文章的電子書。
在我的網站上有份〈JavaScript 本質部份〉文件,這份文件的來源始於過去執行 JavaScript 的教育訓練時發現,許多學員不清楚 JavaScript 語言本身的特性,以及 JavaScript 與瀏覽器的關係,因而在當時,我選擇使用 Rhino shell,單純地闡述 JavaScript 語言,以便切割掉那些其實是瀏覽器提供而不是語言本身具有的特性。
當時會選擇使用 Rhino shell 有兩個原因,一是當年我執行教育訓練時(2009 左右),學員多半也接受過 Java 的教育訓練,對 Java 比較熟悉,二是當年 Node.js 剛開始發展,而我也還沒聽過它,就只是這樣而已。
現在,JavaScript 顯然已經躍為主流語言,主流語言代表著有許多實用性的語言,它的舞台不再侷促於瀏覽器,Node.js 顯然是個功臣,它在構築整個生態系的過程,也可說是個傳奇,更精確的說,它匯集軟體開發上各種需求(或是欲望)的速度是個傳奇!
在撰寫〈JavaScript 本質部份〉時,JavaScript 主要的客戶端舞台仍是瀏覽器,不久前略略掃過 Node.js 的生態時,有點想為〈JavaScript 本質部份〉加上 Node.js 作為另一個客戶端文件,不過後來我想,文件中 JavaScript 核心的部份,應該也要重新審閱一下,既然如此,我就想到用 Node.js 來重新詮譯 JavaScript 核心的部份。
我還沒有要正式介紹 Node.js,不過,在重新以 Node.js 平台認識 JavaScript 之前,我還是先略為說明一下我會怎麼做。如同 Python Tutorial 系列,我會使用 Ubuntu 12.04 LTS,使用這個作業系統的原因是,希望這門課程可以有一個一致的環境,而這個環境不會因為作業系統版本更迭而造成一些初學者的困惑,你可以在一台全新的機器中,或者是在虛擬機器中標準安裝。
我選用的 Node.js 版本是 v0.10.26,安裝的方式是:
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26-linux-x86.tar.gz
tar zxf node-v0.10.26-linux-x86.tar.gz
echo 'export PATH="$HOME/node-v0.10.26-linux-x86/bin:$PATH"' >> ~/.bashrc
重啟終端機後,測試一下 node 指令是否可執行:
測試 node 指令

輸入 node -h 可顯示說明畫面,只輸入 node 會進入指令互動環境,按下 Ctrl+D 可以離開,如果要將程式碼寫在 .js 裏頭再執行,例如編輯一個 helloworld.js:
console.log('Hello, World');
然後執行 node helloworld.js 就可以執行程式:
執行 .js 檔案

如果需要在執行時給定命令列引數的話,可以使用 process.argv,這是一個陣列(Array 實例),索引 0 是 'node' 指令名稱,索引 1 是你的 .js 檔案路徑,如果有指定引數的話,這些引數會是從索引 2 開始儲存。例如若你的 helloworld.js 是:
process.argv.forEach(function(arg, index) {
    console.log(arg + ', ' + index);
});
那麼指定引數時,就會有以下的執行結果:
process.argv

通常,我不太需要指令名稱與檔案路徑,因此,可以只擷取之後索引 1 之後的引數:
var args = process.argv.slice(2);
console.log('Hello, ' + args[0]);
這樣的話,就可以透過 args 索引 0 開始來取得 .js 檔案名稱之後供給的命令列引數了:
指定命令列引數

ECMAScript 在 1999 年發佈第三版,第四版被廢棄,第五版在 2009 發佈,目前第六版即將要推出,這段歷史,可以參考 CodeData 上〈初探 ES6〉系列的說明,接下來的文件,仍是以第三版為主,中間會提及一些第五版的嚴格模式(strict mode),這只要在你想要的程式碼範疇中,加入一段 use strict 字串,如果有支援嚴格模式的環境就會採納,沒有支援的環境,只是當作一個平凡的字串罷了。 例如,在 ES5 的嚴格模式下,不允許對未使用 var 宣告的變數指定值:
'use strict';

x = 10;
console.log(x);
使用 Node.js 的話,執行以下的 .js 檔案,將會發生錯誤:
使用 ES5 嚴格模式

在重新開始整理 JavaScript 語言核心前,必須先聲明的是,這系列不是 JavaScript 語言入門,我只會著重在語言中應當留意的特性,這系列也不會是 Node.js 的介紹,方才一連串的簡介,只是為了後續介紹語言核心時的必要準備,有機會的話,之後也許會有專門的系列來介紹 Node.js。
那麼,就讓我們重新開始吧!如果你等不及,也可以先看看我網站上既有的〈JavaScript 本質部份〉文件,畢竟,重點是在認識語言的核心部份。 後續 >> JavaScript 語言核心(2)與眾不同的資料型態