Effective JavaScript
內容描述
Effective 系列叢書經典著作,亞馬遜五星級暢銷書,Ecma 的JavaScript 標準化委員會著名專家撰寫,JavaScript 語言之父、Mozilla CTO —— Brendan Eich 作序鼎力推薦!作者憑藉多年標準化委員會工作和實踐經驗,深刻辨析JavaScript 的內部運作機制、特性、陷阱和編程最佳實踐,將它們高度濃縮為極具實踐指導意義的68 條精華建議。
本書共分為7 章,分別涵蓋JavaScript 的不同主題。第1 章主要講述最基本的主題,如版本、類型轉換要點、運算符注意事項和分號局限等。第2 章主要講解變量作用域,介紹此方面的一些基本概念,以及一些最佳實踐經驗。第3 章主要講解函數的使用,深刻解析函數、方法和類,並教會讀者在不同的環境下高效使用函數。第4 章主要講解原型和對象,分析JavaScript 的繼承機制以及原型和對象使用的最佳實踐和原則。第5 章主要介紹數組和字典,闡述將對像作為集合的用法以及使用數組和字典的一些陷阱。第6 章介紹庫和API,講解如何設計良好的API 的技巧,以清楚、簡潔和明確地表達程序,並提高可重用率。第7 章講解並發,在技術上討論一些“約定成俗”的JavaScript 用法。
目錄大綱
第1章讓自己習慣JavaScript 1
第1條:了解你使用的JavaScript版本1
第2條:理解JavaScript的浮點數6
第3條:當心隱式的強制轉換8
第4條:原始類型優於封裝對象13
第5條:避免對混合類型使用==運算符14
第6條:了解分號插入的局限16
第7條:視字符串為16位的代碼單元序列21
第2章變量作用域25
第8條:盡量少用全局對象25
第9條:始終聲明局部變量27
第10條:避免使用with 28
第11條:熟練掌握閉包31
第12條:理解變量聲明提升34
第13條:使用立即調用的函數表達式創建局部作用域36
第14條:當心命名函數表達式笨拙的作用域38
第15條:當心局部塊函數聲明笨拙的作用域41
第16條:避免使用eval創建局部變量43
第17條:間接調用eval函數優於直接調用44
第3章使用函數46
第18條:理解函數調用、方法調用及構造函數調用之間的不同46
第19條:熟練掌握高階函數48
第20條:使用call方法自定義接收者來調用方法51
第21條:使用apply方法通過不同數量的參數調用函數53
第22條:使用arguments創建可變參數的函數54
第23條:永遠不要修改arguments對象56
第24條:使用變量保存arguments的引用58
第25條:使用bind方法提取具有確定接收者的方法59
第26條:使用bind方法實現函數柯里化61
第27條:使用閉包而不是字符串來封裝代碼62
第28條:不要信賴函數對象的toString方法63
第29條:避免使用非標準的棧檢查屬性65
第4章對象和原型67
第30條:理解prototype、getPrototype Of和proto之間的不同67
第31條:使用Object.getPrototypeOf函數而不要使用proto屬性69
第32條:始終不要修改proto屬性70
第33條:使構造函數與new操作符無關71
第34條:在原型中存儲方法73
第35條:使用閉包存儲私有數據75
第36條:只將實例狀態存儲在實例對像中76
第37條:認識到this變量的隱式綁定問題78
第38條:在子類的構造函數中調用父類的構造函數81
第39條:不要重用父類的屬性名84
第40條:避免繼承標準類86
第41條:將原型視為實現細節88
第42條:避免使用輕率的猴子補丁88
第5章數組和字典91
第43條:使用Object的直接實例構造輕量級的字典91
第44條:使用null原型以防止原型污染94
第45條:使用hasOwnProperty方法以避免原型污染95
第46條:使用數組而不要使用字典來存儲有序集合99
第47條:絕不要在Object.prototype中增加可枚舉的屬性102
第48條:?避免在枚舉期間修改對象103
第49條:數組迭代要優先使用for循環而不是for...in循環108
第50條:迭代方法優於循環109
第51條:在類數組對像上復用通用的數組方法113
第52條:數組字面量優於數組構造函數114
第6章庫和API設計116
第53條:保持一致的約定116
第54條:將undefined看做“沒有值” 117
第55條:接收關鍵字參數的選項對象121
第56條:避免不必要的狀態125
第57條:使用結構類型設計靈活的接口127
第58條:區分數組對象和類數組對象130
第59條:避免過度的強制轉換134
第60條:支持方法鏈137
第7章並發140
第61條:不要阻塞I/O事件隊列140
第62條:在異步序列中使用嵌套或命名的回調函數143
第63條:當心丟棄錯誤147
第64條:對異步循環使用遞歸150
第65條:不要在計算時阻塞事件隊列153
第66條:使用計數器來執行並行操作156
第67條:絕不要同步地調用異步的回調函數160
第68條:使用promise模式清潔異步邏輯162
作者介紹
David Herman,資深JavaScript 技術專家,Ecma TC39 委員會成員,負責JavaScript 的標準化工作。他擁有格林內爾學院的計算機科學學士學位和美國東北大學的計算機科學碩士及博士學位,現在Mozilla 研究院擔任高級研究員。