編寫高質量代碼:改善JavaScript

基本介紹

內容簡介

《編寫高質量代碼:改善JavaScript程式的188個建議》編輯推薦:從語法、編程思想、編碼規範、工具方法總結出188個編寫高質量JS代碼的技巧、禁忌和最佳實踐!

作者簡介

成林,資深Web前端工程師,從事Web前端工作多年,精通CSS、HTML、JavaScript、jQuery和Ajax等Web前端技術,在實踐中積累了大量的經驗。推崇Web技術標準,曾經在多所高等院校和一些線下技術沙龍主講Web標準和規範相關的課程,曾經還參與過W3C組織的標準化文檔的中文編譯工作。近幾年來,集中精力研究和實踐CSS 3和 HTML
5前沿技術,在國內是該領域的先驅者之一。

圖書目錄

第1章 JavaScript語言基礎
建議1:警惕Unicode亂碼
建議2:正確辨析JavaScript句法中的詞、句和段
建議3:減少全局變數污染
建議4:注意JavaScript數據類型的特殊性
建議5:防止JavaScript自動插入分號
建議6:正確處理JavaScript特殊值
建議7:小心保留字的誤用
建議8:謹慎使用運算符
建議9:不要信任hasOwnProperty
建議10:謹記對象非空特性
建議11:慎重使用偽數組
建議12:避免使用with
建議13:養成最佳化表達式的思維方式
建議14:不要濫用eval
建議15:避免使用continue
建議16:防止switch貫穿
建議17:塊標誌並非多餘
建議18:比較function語句和function表達式
建議19:不要使用類型構造器
建議20:不要使用new
建議21:推薦提高循環性能的策略
建議22:少用函式疊代
建議23:推薦提高條件性能的策略
建議24:最佳化if邏輯
建議25:恰當選用if和switch
建議26:小心if嵌套的思維陷阱
建議27:小心if隱藏的Bug
建議28:使用查表法提高條件檢測的性能
建議29:準確使用循環體
建議30:使用遞歸模式
建議31:使用疊代
建議32:使用制表
建議33:最佳化循環結構
第2章 字元串、正則表達式和數組
建議34:字元串是非值操作
建議35:獲取位元組長度
建議36:警惕字元串連線操作
建議37:推薦使用replace
建議38:正確認識正則表達式工作機制
建議39:正確理解正則表達式回溯
建議40:正確使用正則表達式分組
建議41:正確使用正則表達式引用
建議42:用好正則表達式靜態值
建議43:使用exec增強正則表達式功能
建議44:正確使用原子組
建議45:警惕嵌套量詞和回溯失控
建議46:提高正則表達式執行效率
建議47:避免使用正則表達式的場景
建議48:慎用正則表達式修剪字元串
建議49:比較數組與對象同源特性
建議50:正確檢測數組類型
建議51:理解數組長度的有限性和無限性
建議52:建議使用splice刪除數組
建議53:小心使用數組維度
建議54:增強數組排序的sort功能
建議55:不要拘泥於數字下標
建議56:使用arguments模擬重載
第3章 函式式編程
建議57:禁用Function構造函式
建立58:靈活使用Arguments
建議59:推薦動態調用函式
建議60:比較函式調用模式
建議61:使用閉包跨域開發
建議62:在循環體和異步回調中慎重使用閉包
建議63:比較函式調用和引用本質
建議64:建議通過Function擴展類型
建議65:比較函式的惰性求值與非惰性求值
建議66:使用函式實現歷史記錄
建議67:套用函式
建議68:推薦使用鏈式語法
建議69:使用模組化規避缺陷
建議70:惰性實例化
建議71:推薦分支函式
建議72:惰性載入函式
建議73:函式綁定有價值
建議74:使用高階函式
建議75:函式柯里化
建議76:要重視函式節流
建議77:推薦作用域安全的構造函式
建議78:正確理解執行上下文和作用域鏈
第4章 面向對象編程
建議79:參照Object構造體系分析prototype機制
建議80:合理使用原型
建議81:原型域鏈不是作用域鏈
建議82:不要直接檢索對象屬性值
建議83:使用原型委託
建議84:防止原型反射
建議85:謹慎處理對象的Scope
建議86:使用面向對象模擬繼承
建議87:分辨this和function調用關係
建議88:this是動態指針,不是靜態引用
建議89:正確套用this
建議90:預防this誤用的策略
建議91:推薦使用構造函式原型模式定義類
建議92:不建議使用原型繼承
建議93:推薦使用類繼承
建議94:建議使用封裝類繼承
建議95:慎重使用實例繼承
建議96:避免使用複製繼承
建議97:推薦使用混合繼承
建議98:比較使用JavaScript多態、重載和覆蓋
建議99:建議主動封裝類
建議100:謹慎使用類的靜態成員
建議101:比較類的構造和析構特性
建議102:使用享元類
建議103:使用摻元類
建議104:謹慎使用偽類
建議105:比較單例的兩種模式
第5章 DOM編程
建議106:建議先檢測瀏覽器對DOM支持程度
建議107:應理清HTML DOM載入流程
建議108:謹慎訪問DOM
建議109:比較innerHTML與標準DOM方法
建議110:警惕文檔遍歷中的空格Bug
建議111:克隆節點比創建節點更好
建議112:謹慎使用HTML集合
建議113:用局部變數訪問集合元素
建議114:使用nextSibling抓取DOM
建議115:實現DOM原型繼承機制
建議116:推薦使用CSS選擇器
建議117:減少DOM重繪和重排版次數
建議118:使用DOM樹結構託管事件
建議119:使用定時器最佳化UI 佇列
建議120:使用定時器分解任務
建議121:使用定時器限時運行代碼
建議122:推薦網頁工人執行緒
……
第6章 客戶端編程
第7章 數據互動和存儲
第8章 JavaScript引擎與兼容性
第9章 JavaScript編程規範和套用

序言

為什麼要寫這本書
JavaScript是目前比較流行的Web開發語言。隨著移動網際網路、雲計算、Web3.0和客戶端開發概念的升溫,JavaScript語言不斷成熟和普及,並被廣泛套用於各種B/S架構的項目和不同類型的網站中。對於JavaScript初學者、網頁設計愛好者以及Web套用開發者來說,熟練掌握JavaScript語言是必需的。
JavaScript語言的最大優勢在於靈活性好,適應能力強。藉助各種擴展技術、開源庫或框架,JavaScript能夠完成Web開發中各種複雜的任務,提升客戶端用戶體驗。
作為資深的Web開發人員,筆者已經習慣了與高性能的程式語言和硬體打交道,因此一開始並沒有對JavaScript編程有太高的期望。後來才發現,JavaScript實際上是一種優秀且高效的程式語言,而且隨著瀏覽器對其更好的支持、JavaScript語言本身的性能提升,以及新的工具庫加入,JavaScript不斷變得更好。JavaScript結合HTML 5等為Web開發人員提供了真正可以發揮想像力的空間。Node.js等新技術則為使用JavaScript對伺服器進行編程描繪了非常美好的未來。
但是,在閱讀網上大量散存的JavaScript代碼時,筆者能明顯感覺到很多用戶正在誤入“歧途”:編寫的代碼邏輯不清,結構混亂,缺乏編程人員應有的基本素養。這種現狀一般都是用戶輕視JavaScript語言所致。還有很多用戶屬於“半路出家”,誤認為JavaScript就是一種“玩具語言”,沒有以認真的態度對待和學習這門語言,書寫代碼也很隨意。因此,筆者萌生了寫一本以提高JavaScript代碼編寫質量為目的的書籍,在機械工業出版社華章公司楊福川編輯的鼓勵和指導下,經過近半年的策劃和準備,終於鼓起勇氣動筆了。
本書特色
深。本書不是一本語法書,它不會教讀者怎么編寫JavaScript代碼,但它會告訴讀者,為什麼Array會比String類型效率高,閉包的自增是如何實現的,為什麼要避免DOM疊代……不僅僅告訴讀者How(怎么做),而且還告訴讀者Why(為什麼要這樣做)。
廣。涉及面廣。從編碼規則到編程思想,從基本語法到系統框架,從函式式編程到面向對象編程,都有涉及,而且所有的建議都不是“紙上談兵”,都與真實的場景相結合。
點。從一個知識點展開講解,比如繼承,這裡不提供繼承的解決方案,而是告訴讀者如何根據需要使用繼承,如何設定原型,什麼時候該用類繼承,什麼時候該用原型繼承等。
精。簡明扼要。一個建議就是對一個問題的解釋和說明,以及相關的解決方案,不拖泥帶水,只針對一個問題進行講解。
潔。雖然筆者盡力把每個知識點寫得生動,但代碼就是代碼,很多時候容不得深加工,最直接也就是最簡潔的。
這是一本建議書。有這樣一本書籍在手邊,對如何編寫出優雅而高效的代碼提供指導,將是一件多么愜意的事情啊!
讀者對象
本書適合以下讀者閱讀:
打算學習JavaScript的開發人員。
有意提升自己網站水平和Web應用程式開發能力的Web開發人員。
希望全面深入理解JavaScript語言的初學者。
此外,本書也適合熟悉下列相關技術的讀者閱讀:
PHP/ASP/JSP
HTML/ XML
CSS
對於沒有計算機基礎知識的初學者,以及只想為網站添加簡單特效和互動功能的讀者,閱讀本書前建議先閱讀JavaScript基礎教程類圖書。
如何閱讀本書
本書將改善JavaScript編程質量的188個建議以9章內容呈現:
第1章 JavaScript語言基礎
JavaScript中存在大量的問題,這些問題會妨礙讀者編寫優秀的程式。應該避免JavaScript中那些糟糕的用法,因此本章主要就JavaScript語言的一些基本用法中容易犯錯誤的地方進行說明,希望能夠引起讀者的重視。
第2章 字元串、正則表達式和數組
JavaScript程式與字元串操作緊密相連,在進行字元串處理時無時無刻不需要正則表達式的幫忙。如何提高字元串操 作和正則表達式運行效率是很多開發者最易忽視的問題。同時,數組是所有數據序列中運算速度最快的一種類型,但很多初學者忽略了這個有用的工具。本章將就這3個技術話題展開討論,通過閱讀這些內容相信讀者能夠提高程式的執行效率。
第3章 函式式編程
函式式編程已經在實際套用中發揮了巨大作用,越來越多的語言不斷地加入對諸如閉包、匿名函式等的支持。從某種程度上來講,函式式編程正在逐步同化命令式編程。當然,用好函式並非易事,需要“吃透”函式式編程的本質,本章幫助讀者解決在函式式編程中遇到的各種問題。
第4章 面向對象編程
JavaScript採用的是以對象為基礎,以函式為模型,以原型為繼承機制的開發模式。因此,對於習慣於面向對象開發的用戶來說,需要適應JavaScript語言的靈活性和特殊性。本章將就JavaScript類、對象、繼承等抽象的問題進行探索,幫助讀者走出“誤區”。
第5章 DOM編程
DOM 操作代價較高,在富網頁套用中通常是一個性能瓶頸。因此,在Web開發中,需要特別注意性能問題,儘可能地降低性能損耗。本章將為讀者提供一些好的建議,幫助讀者最佳化自己的代碼,讓程式運行得更快。
第6章 客戶端編程
在JavaScript開發中,很多互動效果都需要CSS的配合才能夠實現,因此CSS的作用不容忽視。本章主要介紹JavaScript+CSS腳本化編程,以及JavaScript事件控制技巧。
第7章 數據互動和存儲
數據互動和存儲是Web開發中最重要的,也是最容易被忽視的問題,它也是高性能JavaScript 的基石,是提升網站可用性的最大要素。本章主要介紹如何使用JavaScript提升數據互動的反應速度,以便更好地讓數據在前、後台傳遞。
第8章 JavaScript引擎與兼容性
JavaScript兼容性是Web開發的一個重要問題。為了實現瀏覽器解析的一致性,需要找出不同引擎的分歧點在哪裡。本章主要介紹各主流引擎在解析JavaScript代碼時的分歧,使讀者能夠編寫出兼容性很高的代碼。
第9章 JavaScript編程規範和套用
每種語言都存在缺陷。事實證明代碼風格在編程中是非常重要的,好的風格促使代碼能被更好地閱讀,更為關鍵的是,它能夠提高代碼的執行效率。本章主要介紹如何提升JavaScript代碼編寫水平,主要包括風格、習慣、效率、協同性等問題,希望能夠給讀者帶來幫助。
本書的期望
您是否曾經為了提供一個簡單的套用解決方案而徹夜地查看原始碼?
您是否曾經為了理解某個框架而冥思苦想、閱覽群書?
您是否曾經為了提升0.1s的DOM性能而對多種實現方案進行嚴格測試和對比?
您是否曾經為了避免兼容問題而遍尋高手共同“診治”?
……
在學習和使用JavaScript的過程中,您是否在原本可以很快掌握或解決的問題上耗費了大量的時間和精力?本書的很多內容都是筆者曾經付出代價換來的,希望它們能夠給您帶來一些幫助!
代碼是一切的基石,一切都是以編碼實現為前提的,通過閱讀本書,期望為讀者帶來如下幫助:
能寫出簡單、清晰、高效的代碼。
能架構一個穩定、健壯、快捷的套用框架。
能回答一個困擾很多人的技術問題。
能修復一個套用開發中遇到的大的Bug。
能非常熟悉某個開源產品。
能提升客戶端套用性能。
……
但是,“工欲善其事,必先利其器”,在“善其事”之前,先檢查“器”是否已經磨得足夠鋒利了,是否能夠在前進的路上披荊斬棘。無論將來的職業發展方向是架構師、設計師、分析師、管理者,還是其他職位,只要還與軟體打交道,就有必要打好技術基礎。本書所涉及的全部是核心的JavaScript編程技術,如果能全部理解並付諸實踐,一定可以夯實JavaScript編程基礎。

相關詞條

相關搜尋

熱門詞條

聯絡我們