初識JavaScript
這個(gè)是在國外經(jīng)常被應(yīng)用的一條和JavaScript有關(guān)系的著名定律:
Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.
翻譯過來就是:
Atwood定律:凡是能用JavaScript寫出來的甲捏,最終都會用JavaScript寫出來差牛。
JavaScript是什么
JavaScript一種直譯式腳本語言景描,是一種動(dòng)態(tài)類型、弱類型仓犬、基于原型的語言嗅绰,內(nèi)置支持類型。它的解釋器被稱為JavaScript引擎搀继,為瀏覽器的一部分窘面,廣泛用于客戶端的腳本語言,最早是在HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)網(wǎng)頁上使用叽躯,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能财边。
在1995年時(shí),由Netscape公司的Brendan Eich点骑,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計(jì)實(shí)現(xiàn)而成酣难。因?yàn)镹etscape與Sun合作们童,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript鲸鹦。但實(shí)際上它的語法風(fēng)格與Self及Scheme較為接近慧库。
為了取得技術(shù)優(yōu)勢,微軟推出了JScript馋嗜,CEnvi推出ScriptEase齐板,與JavaScript同樣可在瀏覽器上運(yùn)行。為了統(tǒng)一規(guī)格葛菇,因?yàn)镴avaScript兼容于ECMA標(biāo)準(zhǔn)甘磨,因此也稱為ECMAScript。
JavaScript能做什么
現(xiàn)在JavaScript能做的事情已經(jīng)非常多了:
- 圖形處理
- PDF生成
- 建立服務(wù)器
- 編譯解釋器
- 圖形界面
- 數(shù)據(jù)庫
- 各種測試工具
- 視頻和音頻播放處理
- 通信
- 多人協(xié)作
等等等等.....
Web前端
很早以前各大公司對于 Web 標(biāo)準(zhǔn)的惡戰(zhàn)讓 JS 的環(huán)境異常惡劣眯停,加之語言其本身的不成熟讓其功能僅限于一些簡單的前端交互济舆。Ajax 技術(shù)的出現(xiàn)讓前端可以在不刷新頁面的情況下和后端進(jìn)行數(shù)據(jù)交換,jQuery/zepto 等庫的盛行讓 JS 變得異常簡單莺债,Bootstrap/Amaze UI 等 UI 框架更是讓前端的成本無限降低滋觉,RequireJS/SeaJs 讓 JavaScript 也可以進(jìn)行依賴管理,MVVM(Model-View-ViewModel 的出現(xiàn)讓前后端的分離做到了極致齐邦,JavaScript 在前端領(lǐng)域前景明朗椎侠。
后端之旅
2009年5月,Ryan Dah 發(fā)布了 Node 的最初版本措拇。Node 是一個(gè)基于 Chrome JavaScript 運(yùn)行時(shí)建立的平臺我纪,它對 Google V8 引擎進(jìn)行了封裝,使 JavaScript 第一次走出前端運(yùn)行在了服務(wù)器上丐吓。這對 JavaScript 來說是一種質(zhì)的突破浅悉,這使得 Web 編程可以只用一門語言便可完成。It's Amazing! Web 的大一統(tǒng)時(shí)代仿佛就要來了券犁。同時(shí) Node 也誕生了 npm术健,從此 JavaScript 也有了強(qiáng)大的包管理機(jī)制。
Hybrid App
傳統(tǒng)上 JavaScript 只能在瀏覽器中運(yùn)行族操,Node 的出現(xiàn)讓 JavaScript 運(yùn)行在了服務(wù)端苛坚,然而脫離瀏覽器 JavaScript 還是不能跨平臺運(yùn)行比被。人們總是希望用一種方式去做所有的事情色难,于是聰明的工程師們就發(fā)明了 Hybrid App 這種形式,讓 JavaScript 在一定意義上運(yùn)行在了移動(dòng)設(shè)備上等缀。然而當(dāng)前 Hybrid App 雖然讓 JavaScript 也可以寫出 JAVA/Objective-C 才能實(shí)現(xiàn)的 APP枷莉,但是這種方式仍然沒有拋棄瀏覽器運(yùn)行環(huán)境,對 WebView 有很強(qiáng)的依賴性尺迂,性能和原生應(yīng)用還有很大差距笤妙。
桌面應(yīng)用
至此 JavaScript 除了可以被瀏覽器解析冒掌,也可以作為后端語言使用,還可以用來構(gòu)建移動(dòng)端 APP蹲盘。仿佛已經(jīng)夠強(qiáng)大了吧股毫,然而這還不夠,JavaScript 還可以用來構(gòu)建桌面應(yīng)用召衔!
Node-webkit
Node-webkit 是一個(gè) Web 應(yīng)用程序運(yùn)行時(shí)環(huán)境铃诬,它可以讓你以 Web 的方式來寫桌面應(yīng)用程序,你可以用任何流行的 Web 技術(shù)來編寫一個(gè)跨平臺(Windows苍凛,Linux趣席,MacOS)的桌面程序,并且性能和交互也是良好的醇蝴,Teambition 桌面客戶端便是使用 Node-webkit 編寫的宣肚。目前在GitHub 上有 24463 Star
heXheX
是有道公司開發(fā)的采用前端技術(shù)(HTML,CSS悠栓,JavaScript)開發(fā)桌面應(yīng)用軟件的跨平臺解決方案霉涨,意在解決傳統(tǒng)桌面應(yīng)用開發(fā)中繁瑣的 UI 和交互開發(fā)工作,使其變的簡單而高效惭适。特別適合重 UI嵌纲,重交互的桌面應(yīng)用軟件。新版有道詞典 beta 版的首頁便是使用 heX 開發(fā)完成的
神作 React
ReactReact(React.js) 是由 FaceBook 開發(fā)和維護(hù)的前端框架腥沽,目前在 GitHub 得到了 27900+ star逮走。它摒棄了 MVC/MVVM 的模式,僅僅是做 UI今阳,開創(chuàng)性地采用了 Virtual DOM(虛擬 DOM)避免了 DOM 操作消耗性能的問題师溅,將 UI 拆分成不同的可組合、可復(fù)用盾舌、可維護(hù)的組件墓臭,組件和組件之間耦合度極低,開發(fā)效率大幅度增加妖谴。在前端 UI 組件化的趨勢下窿锉,這很值得去嘗試。instagram.com全站都采用 React 進(jìn)行開發(fā)膝舅。
游戲
世界上最流行的 2D 游戲引擎之一 Cocos2d 和最流行的 3D 游戲引擎之一 Unity3D 均支持 JS 開發(fā)游戲嗡载。
Cocos2d-js
Cocos2d-JS 是 Cocos2d-x 的 JavaScript 版本,融合了 Cocos2d-html5 和Cocos2d-x JavaScript Bindings仍稀。它支持 Cocos2d-x 的所有核心特性并提供更簡單易用的 JavaScript 風(fēng)格 API洼滚,并且天然支持原生、瀏覽器跨平臺應(yīng)用技潘。在3.0版中遥巴,Cocos2d-JS 完成了不同平臺工作流的徹底整合千康,為不同平臺提供了統(tǒng)一的開發(fā)體驗(yàn)。無論開發(fā) Web 應(yīng)用還是原生應(yīng)用铲掐,都可以便捷地采用 Cocos2d-JS 實(shí)現(xiàn)“一次開發(fā)拾弃,全平臺運(yùn)行”。采用 Cocos2d-JS 開發(fā)的同一套 JavaScript 游戲代碼摆霉,可以同時(shí)運(yùn)行在 Mac OS X, Windows, iOS, Android等原生平臺砸彬、以及所有現(xiàn)代瀏覽器上,這將使得我們的開發(fā)者輕松覆蓋幾乎所有發(fā)行渠道斯入,帶來前所未有的機(jī)遇砂碉。另一方面,若開發(fā)者只想開發(fā)一款 Web 輕度休閑游戲刻两,Cocos2d-JS 也專門為此類游戲定制了 Lite Version增蹭,直接將 Cocos2d-JS Lite Version 集成到頁面中即可使用。
Unity3D
Unity3D 是一個(gè)跨平臺的 3D 游戲引擎磅摹,與 Cocos2d 最大的區(qū)別在于前者主要面對 2D 游戲開發(fā)者滋迈,后者主要進(jìn)行大型 3D 游戲的開發(fā)