[TOC]
# 第二章 為什么選擇JavaScript?
那里有很多編程語言。為什么要使用JavaScript?本章討論了七個方面,當您選擇一種編程語言時,這些方面很重要,并認為JavaScript整體性很好:
1. 是免費提供嗎?
2. 它是一種優雅的編程語言嗎?
3. 在實踐中有用嗎?
4. 它是否具有良好的工具,特別是良好的集成開發環境(IDE)?
5. 它是否足夠快你想做什么?
6. 是否廣泛使用?
7. 它有未來嗎?
## JavaScript自由可用嗎
JavaScript 可以說是最開放的編程語言:ECMA-262,其規范是ISO標準。該規范緊隨其后的是獨立方的許多實施。其中一些實現是開源的。此外,語言的演變由TC39處理,TC39由所有主要瀏覽器廠商在內的幾家公司組成。這些公司中的許多公司通常是競爭對手,但是他們為了這個語言的利益而共同合作。
## JavaScript優雅嗎
可以說優雅,也不優雅。我用不同范例的幾種編程語言編寫了相當數量的代碼。因此,我很清楚JavaScript不是優雅的頂峰。然而,它是一種非常靈活的語言,具有相當優雅的核心,使您能夠使用面向對象編程和功能編程的混合體。
JavaScript引擎之間的語言兼容性曾經是一個問題,但現在不存在了,部分歸功于[est262 suite](https://github.com/tc39/test262),它檢查引擎是否符合ECMAScript規范。相比之下,瀏覽器和DOM的差異仍然是一個挑戰。這就是為什么通常最好依靠框架來隱藏這些差異。
## JavaScript有用嗎
世界上最美麗的編程語言是無用的,除非它允許您編寫所需的程序。
### 圖形用戶界面
在圖形用戶界面方面,JavaScript將成為HTML5的一部分。在本節中,我將HTML5用于“瀏覽器平臺”(HTML,CSS和瀏覽器JavaScript API)。HTML5廣泛部署,不斷進步。它正在慢慢成為編寫全功能跨平臺應用程序的完整層; 類似于Java平臺,它幾乎像一個嵌入式操作系統。HTML5的一個賣點是它可以讓您編寫跨平臺的圖形用戶界面。這些都是妥協的:你放棄一些質量來換取不限于一個操作系統。過去,“跨平臺”意味著Windows,Mac OS或Linux。
但現在我們有了兩個額外的互動平臺:網絡和移動平臺。有了HTML5,你可以通過[Cordova](http://cordova.apache.org/)、[Chrome Apps](http://developer.chrome.com/apps/)和[TideSDK](http://www.tidesdk.org/)等技術來實現所有這些平臺的目標。
另外,有幾個平臺將網絡應用程序作為本機應用程序,或者您可以自己安裝它們,例如Chrome操作系統,Firefox操作系統和Android。
### 其他技術補充JavaScript
除了HTML5,還有更多的技術可以補充JavaScript,使語言更有用:
**JS庫**
JavaScript有豐富的庫,使您能夠完成從解析JavaScript(通過[Esprima](http://esprima.org/))到處理和顯示PDF文件(通過[PDF.js](https://github.com/mozilla/pdf.js))的任務。
**Node.js**
Node.js 平臺允許您編寫服務器端代碼和shell腳本(構建工具,測試運行程序等)。
**JSON**(JavaScript對象表示法,在第22章中介紹)
JSON 是一種以JavaScript為基礎的數據格式,已經變得流行在Web上交換數據(例如,Web服務的結果)。
**NoSQL數據庫**(如[CouchDB](http://couchdb.apache.org/)和[MongoDB](http://www.mongodb.org/))
這些數據庫緊密地集成了JSON和JavaScript。
## JavaScript有好的工具嗎?
JavaScript越來越好的構建工具(例如,[Gulp](http://gulpjs.com/))和測試工具(例如[mocha](http://visionmedia.github.io/mocha/))。Node.js可以通過一個shell(而不僅僅是瀏覽器)來運行這些工具。這個領域的一個風險是碎片化,隨著我們越來越多地使用這些工具。
JavaScript IDE空間仍然是新興的,但它的快速成長。網絡開發的復雜性和活力使得這個空間成為創新的肥沃土地。兩個開源示例是[ Brackets](http://brackets.io/)和[Light Table](http://www.lighttable.com/)。
此外,瀏覽器正變得越來越有能力開發環境。特別是Chrome,最近取得了令人矚目的進展。未來將集成更多的ide和瀏覽器,這將是一件很有趣的事情。
## JavaScript足夠快嗎?
JavaScript引擎已經取得了巨大的進步,從緩慢的口譯員演變成了快速即時編譯器。它們現在對于大多數應用來說足夠快。此外,新的想法已經在開發中,可以使JavaScript足夠快地用于其余的應用程序:
[asm.js](http://asmjs.org/)是一個(非常靜態)的JavaScript子集,在當前引擎上運行速度很快,與編譯的C ++一樣快。例如,它可以用于實現Web應用程序的性能關鍵算法部分。它也被用于將基于C ++的游戲移植到Web平臺。
[ParallelJS](http://www.2ality.com/2013/12/paralleljs.html)并行化使用新陣列方法的JavaScript代碼mapPar,filterPar和reducePar(現有陣列方法可并行化版本map,filter和reduce)。為了使并行化工作,回調必須以特殊樣式寫入; 主要的限制是您不能突變在回調中未創建的數據。
## JavaScript使用廣泛嗎?
廣泛使用的語言通常有兩個好處。首先,這種語言更好地記錄和支持。第二,更多的程序員知道這一點,當您需要雇用某人或正在尋找基于該語言的工具的客戶時,這很重要。
JavaScript被廣泛使用并且獲得了上述兩個優點:
* 這些天,JavaScript的文檔和支持都有各種形式和大小:書籍,播客,博客文章,電子郵件通訊,論壇等。[第33章](http://speakingjs.com/es5/ch33.html)指出重要的資源。
* JavaScript開發人員的需求很大,但他們的隊伍也在不斷增加。
## JavaScript有未來嗎?
幾件事情表明JavaScript有一個光明的未來:
* 語言正在穩步發展; ECMAScript 6看起來不錯。
* 有很多與JavaScript相關的創新(例如,上述asm.js和ParallelJS,Microsoft的TypeScript等)。
* JavaScript的一個組成部分的Web平臺正在快速成熟。
* JavaScript由廣泛的公司聯盟支持 - 沒有一個人或公司控制它。
## 結論
考慮到上面列出了什么使語言具有吸引力,JavaScript正在做得非常好。這當然不是完美的,但是現在很難打敗,事情只會越來越好。
- 本書簡介
- 前言
- 關于這本書你需要知道些什么
- 如何閱讀本書
- 目錄
- I. JavaScript的快速入門
- 第1章 基礎的JavaScript
- II. 背景知識
- 第2章 為什么選擇JavaScript?
- 第3章 JavaScript的性質
- 第4章 JavaScript是如何創造出來的
- 第5章 標準化:ECMAScript
- 第6章 JavaScript的歷史里程碑
- III. 深入JavaScript
- 第7章 JavaScript語法
- 第8章 值
- 第9章 運算符
- 第10章 布爾值
- 第11章 數字
- 第12章 字符串
- 第13章 語句
- 第14章 異常捕獲
- 第15章 函數
- 第16章 變量:作用域、環境和閉包
- 第17章 對象和繼承
- 第18章 數組
- 第19章 正則表達式
- 第20章 Date
- 第21章 Math
- 第22章 JSON
- 第23章 標準全局變量
- 第24章 編碼和JavaScript
- 第25章 ECMAScript 5中的新功能
- IV. 技巧、工具和類庫
- 第26章 元代碼樣式指南
- 第27章 調試的語言機制
- 第28章 子類化內置構造函數
- 第29章 JSDoc:生成API文檔
- 第30章 類庫
- 第31章 模塊系統和包管理器
- 第32章 其他工具
- 第33章 接下來該做什么
- 著作權