1. Introduction

  • JavaScrip在1995年5月問世。
  • JavaScript在1996年進行標準化,第一個標準化版本ECMA-262於1997年採納,因為Java名稱上具有商標問題,ECMA-262採用了ECMAScript作為語言名稱,JavaScript此後成為了ECMA-262標準的實作語言,現在的瀏覽器,幾乎都能支援1999年發布的ECMA-262第三版以上的實作,又稱ECMAScript 3,對應的實作為JavaScript 1.5
  • 由於一些政治因素,ECMAScript 4發展意見發生分岐,原有規範中的一小部份是就現有功能作了改進,被發布為ECMAScript 3.1。後來ECMAScript 4被中止,ECMAScript 3.1被改名ECMAScript 5,並於2009年發布,後續2011年又發布了ECMAscript 5.1
  • ECMAScript 5的主要特點之一是可宣告嚴格模式Strict mode),透過在程式碼中加入'use strict'字串,一些過去被認為不良實踐的語法就會無法使用,嚴格模式下有許多規範,是關於識別字名稱使用上的限制,像是沒有使用var宣告的變數無法使用,不能使用with,不能有重複的參數或特性名稱,不能與保留字或既存的識別字名稱衝突(像是arguments),eval函式評估出來的變數不能在外部使用等,很顯然地,這反映了過去語言在範疇Scope)與名稱空間Namespace)管理上過於鬆散,因而必須加強範疇與名稱空間管理上的約束。
  • 像是ECMAScript 5之前,如果this沒有實際對象,也就是this實際上是null或undefined時,會自動轉換為全域物件,這又會造成許多誤判或誤用的問題,嚴格模式下禁止了這個行為,實際上,為了讓開發者能明確掌握this,函式新增了bind函式,可以讓你固定this的對象傳回新函式,讓this不會隨著呼叫者自動變換。在這之前,開發者為了要能更精確掌握this實際對象,避免不清不楚下發生問題,亦會明確地在使用call或apply函式時,指定this的對象。
  • JavaScript之父Brendan Eich(音:艾可,德國姓)。Brendan Eich在1995年僅花了10天就開發出JavaScript。之所以命名使用了Java這四個字母,完全是行銷上考量,他想藉由Java的名氣使更多人注意到JavaScriptBrendan Eich想讓JavaScript乍看之下很像是Java,但是其實與Java非常不一樣。而JavaJavaScript雖然都屬於物件導向語言,語法和物件的繼承方式卻不同。Brendan Eich強調,其中一個很大的差異在於型別,Java是靜態型別,也就是說在撰寫Java程式碼時,開發者需要先定義變數的型別,JavaScript卻不需要,這使得JavaScript的程式在開發上,更為彈性且容易,不過這卻也是JavaScript的致命傷,動態型別使得JavaScript的執行效能受到影響。
  • Java是由被Oracle買下的Sun發表,JavaScript則是由Netscape發表,原本名字叫LiveScript,因為Netscape在自己的瀏覽器支援Java AppletJava又名氣大噪,就把LiveScript改名JavaScript一起打知名度。而Netscape後來把JavaScript提交給ECMA制定為國際標準,稱做ECMAScript,真正跟JavaScript是兄弟的是Adobe FlashActionScriptMicrosoftJScript,因為一樣都是依ECMAScript標準建制。
  • Node.js是一個可用來開發伺服器端網路應用程式的跨平台運作環境,允許開發人員以各式應用程式介面API)來撰寫應用程式,被視為是全球成長最快的API開發框架之一。
  • 2009年釋出的Node.js為一開放源碼的跨平台運作環境,主要用來開發伺服器端的網路應用程式,包括IBM微軟YahooSAPPayPalGoDaddy都是Node.js的用戶,雖然在2014年底時,Node.js社群因內部意見不合導致有人出走並另創了同類型的io.js,不過雙方在今年6月同意透過中立的Node.js基金會重新合併,並由Linux基金會負責管理。Node.js 4.0即是Node.jsio.js整併後的第一個產品,也是Node.js的第一個穩定版,版本別則自7月的0.12.7直接跳到4.0。Node.js 4.0採用與最新Chrome瀏覽器一致的4.5版V8 JavaScript引擎,亦建立了涵蓋OS XWindowsFreeBSDSmartOS等多種作業系統的測試叢集,並對ARM處理器有一流的支援,包含ARM6ARM7與最新的64位元ARM8等處理器,意味著它已正式準備好要供應給業餘的科技愛好者及ARM伺服器用戶來使用。
  • ES6JavaScript現在2015年標準,與之前版本的語法及概念不同,有相當大的變動。
  • 知名開發框架Node.js在2014年底鬧內鬨,最後分裂出了io.js,歷經了9個月的分手,社群重修舊好,兩個專案再次合併為Node.js,並全然納入io.js過去更新的程式碼,版本號從0.12一躍到了4.0,在2015年9月時,對外釋出Node.js 4.0正式版。這次的更新除了支援新JavaScript解析引擎V8外,也支援最新版本ES6ECMAScript6)的JavaScript規格,另外,Node.js也在0.12版開始提供長期支援Long Term SupportLTS)版本,顯示Node.js進入成熟發展階段。由於新版JavaScript解析引擎V8完全支援ES6的新功能,因此Node.js在搶先支援ES6後,也開始可以使用諸多ES6才有的新特色,像是習慣C++的開發者,在Node.js終於能夠使用類別Class)。另外,ES6還支援了Generator,因此新版Node.js的開發者可以用更高效率的方法處理遞迴問題。Node.js經過一段時間的發展,逐漸趨於成熟與穩定,而提供長期支援版本便是一個重要的指標,因為企業能夠有計畫的掌握版本更新時程,Node.js每12個月會釋出一個長期支援版本,而這個版本會被維護18個月。另外,Node.js 4.0在效能上也有長足的進步,經國外開發者以Apache HTTP伺服器指標工具測試後,發現Node.js 4.0能比前一版本少用一半以上的記憶體,但仍維持同樣的效能。
  • 網頁語言JavaScript不只用於前端網頁,進幾年越來越多伺服器端程式採用Node.js框架來開發後端需要的應用程式
  • Node.js是基於Google所開發出名為V8JavaScript引擎所創造出來的Framework。它特別的地方在於,一般由JavaScript開發出來的套件,通常都是應用在網路前端平臺上,像是jQuery等,而Node.js卻可以用來開發後端的應用程式。以往JavaScript都是運行在瀏覽器上,而Node.js的出現,可以將JavaScript變成一個通用平臺的語言使用,因此可以讓它做任何事情。而Node.js在伺服器應用上的效能不錯,反應速度也很快。PythonRuby等語言在這方面的效率,就比不上Node.js了,而這也是它的優勢。
  • 回呼 (Callback),當實作程式出現許多重複流程,僅小部份需要特定實作時,可以將重複流程實作為樣版,而特定實作由呼叫者提供回呼物件或函式,例如對JavaScript的陣列排序可以寫為[1, 3, 2, 5, 4].sort(function(a, b) { return a - b; })。
  • NW.js為一結合Node.jsChromium專案的JavaScript應用程式開發框架,可用來打造支援WindowsMac OS XLinux的應用程式,有別於瀏覽器對JavaScript程式碼的沙箱執行限制,NW.js移除了相關的限制,並允許程式直接與作業系統互動。NW.js除了允許程式在不同的平台上運作之外,也讓開發人員更容易把網路程式轉成桌面程式。
  • NW.js的最大優勢在於它所需的.NetJava運行環境都已經安裝在各個系統上了。
  • 嚴格模式 (Strict Mode)
  • 承諾 (Promise)
  • 詞法作用域 (Lexical Block Scoping)

  • https://www.npmjs.com/package/nodemon

  • https://www.npmjs.com/package/async
  • https://www.npmjs.com/package/bcrypt-nodejs
  • https://www.npmjs.com/package/bitgo
  • https://www.npmjs.com/package/cheerio
  • https://www.npmjs.com/package/clockwork
  • https://www.npmjs.com/package/connect-mongo
  • https://www.npmjs.com/package/dotenv
  • https://www.npmjs.com/package/express
  • https://www.npmjs.com/package/body-parser
  • https://www.npmjs.com/package/express-session
  • https://www.npmjs.com/package/morgan
  • https://www.npmjs.com/package/compression
  • https://www.npmjs.com/package/errorhandler
  • https://www.npmjs.com/package/serve-favicon
  • https://www.npmjs.com/package/node-sass-middleware
  • https://www.npmjs.com/package/express-flash
  • https://www.npmjs.com/package/fbgraph
  • https://www.npmjs.com/package/github-api
  • https://www.npmjs.com/package/mongoose
  • https://www.npmjs.com/package/nodemailer
  • https://www.npmjs.com/package/passport
  • https://www.npmjs.com/package/passport-local
  • https://www.npmjs.com/package/passport-facebook
  • https://www.npmjs.com/package/passport-oauth
  • https://www.npmjs.com/package/request
  • https://www.npmjs.com/package/lodash
  • https://www.npmjs.com/package/validator
  • https://www.npmjs.com/package/geoip-lite
  • http://numeraljs.com/
  • https://filesizejs.com/
  • https://github.com/bluesmoon/node-geoip

powered by Gitbook最後更新: 2017-11-30 14:13:49

results matching ""

    No results matching ""