任何語(yǔ)言都需要強(qiáng)調(diào)編碼風(fēng)格的一致性。只要是團(tuán)隊(duì)開發(fā),每個(gè)人都以相同方式編寫代碼就是至關(guān)重要的。這樣大家才能方便地互相看懂和維護(hù)對(duì)方的代碼。
《編寫可維護(hù)的JavaScript》向開發(fā)人員闡述了如何在團(tuán)隊(duì)開發(fā)中編寫具備高可維護(hù)性的JavaScript代碼,書中詳細(xì)說(shuō)明了作為團(tuán)隊(duì)一分子,應(yīng)該怎么寫JavaScript。本書內(nèi)容涵蓋了編碼風(fēng)格、編程技巧、自動(dòng)化、測(cè)試等幾方面,既包括具體風(fēng)格和原則的介紹,也包括示例和技巧說(shuō)明,最后還介紹了如何通過自動(dòng)化的工具和方法來(lái)實(shí)現(xiàn)一致的編程風(fēng)格。
《編寫可維護(hù)的JavaScript》作者Nicholas C. Zakas是頂級(jí)的Web技術(shù)專家,也是《JavaScript高級(jí)程序設(shè)計(jì)》一書的作者。他曾是Yahoo!的首席前端開發(fā)工程師,在完成了從一名“獨(dú)行俠”到“團(tuán)隊(duì)精英”的蛻變后,他站在前端工程師的角度提煉出眾多的最佳編程實(shí)踐,其中包括很多業(yè)內(nèi)權(quán)威所推崇的最佳法則,而這些寶貴經(jīng)驗(yàn)正是本書的核心內(nèi)容。
《編寫可維護(hù)的JavaScript》適合前端開發(fā)工程師、JavaScript程序員和學(xué)習(xí)JavaScript編程的讀者閱讀,也適合開發(fā)團(tuán)隊(duì)負(fù)責(zé)人、項(xiàng)目負(fù)責(zé)人閱讀。運(yùn)用本書中講述的技巧和技術(shù),可以使JavaScript團(tuán)隊(duì)編程從俠義的個(gè)人偏好的陰霾走出來(lái),走向真正的高可維護(hù)性、高效能和高水準(zhǔn)。
《編寫可維護(hù)的javascript》適合前端開發(fā)工程師、javascript程序員和學(xué)習(xí)javascript編程的讀者閱讀,也適合開發(fā)團(tuán)隊(duì)負(fù)責(zé)人、項(xiàng)目負(fù)責(zé)人閱讀。
本書約定
這個(gè)圖標(biāo)表示一種提示、建議或一般性的提醒。
這個(gè)圖標(biāo)表示一種警告。
使用示例代碼
本書是為了幫助你完成你的工作。通常來(lái)講,你可以任意使用本書中的程序和文檔。你不需要在這之前聯(lián)系我們獲得使用許可,但若復(fù)制程序的關(guān)鍵部分除外。比如,你的程序使用了本書中的多段代碼,這不需要獲取我們的許可。出售或者散布O'Reilly的書籍的示例代碼光盤則需要首先獲得授權(quán)。通過引用本書的內(nèi)容或者代碼來(lái)回答問題不需要預(yù)先獲得許可,但將本書的示例代碼的關(guān)鍵部分合并入你的產(chǎn)品或者文檔則需要獲得我們的許可。
我們不要求你一定注明本書的出處。一個(gè)完整的出處說(shuō)明應(yīng)當(dāng)包括標(biāo)題、作者、出版社和ISBN。比如:Maintainable JavaScript,作者Nicholas Zakas(O'Reilly)。Copyright 2012 Nicholas Zakas,978-1-449-32768-2。
如何聯(lián)系我們
對(duì)于本書的評(píng)論或問題請(qǐng)聯(lián)系出版商:
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
Nicholas C. Zakas,是一名前端開發(fā)顧問、作者、演講家。他在Yahoo! 供職超過5年時(shí)間。在這期間,他曾是Yahoo!首頁(yè)首席前端工程師和YUI代碼貢獻(xiàn)者。他著有《JavaScript高級(jí)程序設(shè)計(jì)》、《Ajax高級(jí)程序設(shè)計(jì)》和《高性能JavaScript》。
第一部分 編程風(fēng)格
第1章 基本的格式化
1.1 縮進(jìn)層級(jí)
1.2 語(yǔ)句結(jié)尾
1.3 行的長(zhǎng)度
1.4 換行
1.5 空行
1.6 命名
1.6.1 變量和函數(shù)
1.6.2 常量
1.6.3 構(gòu)造函數(shù)
1.7 直接量
1.7.1 字符串
1.7.2 數(shù)字
1.7.3 null
1.7.4 undefined
1.7.5 對(duì)象直接量
1.7.6 數(shù)組直接量
第2章 注釋
2.1 單行注釋
2.2 多行注釋
2.3 使用注釋
2.3.1 難于理解的代碼
2.3.2 可能被誤認(rèn)為錯(cuò)誤的代碼
2.3.3 瀏覽器特性hack
2.4 文檔注釋
第3章 語(yǔ)句和表達(dá)式
3.1 花括號(hào)的對(duì)齊方式
3.2 塊語(yǔ)句間隔
3.3 switch語(yǔ)句
3.3.1 縮進(jìn)
3.3.2 case語(yǔ)句的“連續(xù)執(zhí)行”
3.3.3 default
3.4 with語(yǔ)句
3.5 for循環(huán)
3.6 for-in循環(huán)
第4章 變量、函數(shù)和運(yùn)算符
4.1 變量聲明
4.2 函數(shù)聲明
4.3 函數(shù)調(diào)用間隔
4.4 立即調(diào)用的函數(shù)
4.5 嚴(yán)格模式
4.6 相等
4.6.1 eval()
4.6.2 原始包裝類型
第二部分 編程實(shí)踐
第5章 UI層的松耦合
5.1 什么是松耦合
5.2 將JavaScript從CSS中抽離
5.3 將CSS從JavaScript中抽離
5.4 將JavaScript從HTML中抽離
5.5 將HTML從JavaScript中抽離
5.5.1 方法1:從服務(wù)器加載
5.5.2 方法2:簡(jiǎn)單客戶端模板
5.5.3 方法3:復(fù)雜客戶端模板
第6章 避免使用全局變量
6.1 全局變量帶來(lái)的問題
6.1.1 命名沖突
6.1.2 代碼的脆弱性
6.1.3 難以測(cè)試
6.2 意外的全局變量
避免意外的全局變量
6.3 單全局變量方式
6.3.1 命名空間
6.3.2 模塊
6.4 零全局變量
第7章 事件處理
7.1 典型用法
7.2 規(guī)則1:隔離應(yīng)用邏輯
7.3 規(guī)則2:不要分發(fā)事件對(duì)象
第8章 避免“空比較”
8.1 檢測(cè)原始值
8.2 檢測(cè)引用值
8.2.1 檢測(cè)函數(shù)
8.2.2 檢測(cè)數(shù)組
8.3 檢測(cè)屬性
第9章 將配置數(shù)據(jù)從代碼中分離出來(lái)
9.1 什么是配置數(shù)據(jù)
9.2 抽離配置數(shù)據(jù)
9.3 保存配置數(shù)據(jù)
第10章 拋出自定義錯(cuò)誤
10.1 錯(cuò)誤的本質(zhì)
10.2 在JavaScript中拋出錯(cuò)誤
10.3 拋出錯(cuò)誤的好處
10.4 何時(shí)拋出錯(cuò)誤
10.5 try-catch語(yǔ)句
10.6 錯(cuò)誤類型
第11章 不是你的對(duì)象不要?jiǎng)?br />11.1 什么是你的
11.2 原則
11.2.1 不覆蓋方法
11.2.2 不新增方法
11.2.3 不刪除方法
11.3 更好的途徑
11.3.1 基于對(duì)象的繼承
11.3.2 基于類型的繼承
11.3.3 門面模式
11.4 關(guān)于Polyfill的注解
11.5 阻止修改
第12章 瀏覽器嗅探
12.1 User-Agent檢測(cè)
12.2 特性檢測(cè)
12.3 避免特性推斷
12.4 避免瀏覽器推斷
12.5 應(yīng)當(dāng)如何取舍
第三部分 自動(dòng)化
第13章 文件和目錄結(jié)構(gòu)
13.1 最佳實(shí)踐
13.2 基本結(jié)構(gòu)
第14章 Ant
14.1 安裝
14.2 配置文件
14.3 執(zhí)行構(gòu)建
14.4 目標(biāo)操作的依賴
14.5 屬性
14.6 Buildr項(xiàng)目
第15章 校驗(yàn)
15.1 查找文件
15.2 任務(wù)
15.3 增強(qiáng)的目標(biāo)操作
15.4 其他方面的改進(jìn)
15.5 Buildr任務(wù)
第16章 文件合并和加工
16.1 任務(wù)
16.2 行尾結(jié)束符
16.3 文件頭和文件尾
16.4 加工文件
第17章 文件精簡(jiǎn)和壓縮
17.1 文件精簡(jiǎn)
17.1.1 使用YUI Compressor精簡(jiǎn)代碼
17.1.2 用Closure Compiler精簡(jiǎn)
17.1.3 使用UglifyJS精簡(jiǎn)
17.2 壓縮
17.2.1 運(yùn)行時(shí)壓縮
17.2.2 構(gòu)建時(shí)壓縮
第18章 文檔化
18.1 JSDoc Toolkit
18.2 YUI Doc
第19章 自動(dòng)化測(cè)試
19.1 YUI Test Selenium引擎
19.1.1 配置一臺(tái)Selenium服務(wù)器
19.1.2 配置YUI Test Selenium引擎
19.1.3 使用YUI Test Selenium引擎
19.1.4 Ant的配置寫法
19.2 Yeti
19.3 PhantomJS
19.3.1 安裝及使用
19.3.2 Ant的配置寫法
19.4 JsTestDriver
19.4.1 安裝及使用
19.4.2 Ant的配置寫法
第20章 組裝到一起
20.1 被忽略的細(xì)節(jié)
20.2 編制打包計(jì)劃
20.2.1 開發(fā)版本的構(gòu)建
20.2.2 集成版本的構(gòu)建
20.2.3 發(fā)布版本的構(gòu)建
20.3 使用CI系統(tǒng)
20.3.1 Jenkins
20.3.2 其他CI系統(tǒng)
附錄A JavaScript編碼風(fēng)格指南
附錄B JavaScript工具集