駕馭 JavaScript 的 68 個具體作法
JavaScript 發明人 Brendan Eich 專文推薦
「少有程式語言達人能夠像 David 這樣寫出流暢通順且措辭淺白的文字,透過其深邃的洞察力,他以引人入勝的方式帶我們逐一探索 JavaScript 的語法和語意,一路提醒我們要特別注意的事項,並以實際的使用案例來補充說明,步調和緩而舒適。讀完此書後,你會對 JavaScript 有更穩健且透徹的理解。」
—Paul Irish,Google Chrome 的開發人員大使
「這本書並不適合那些尋找捷徑的人,這是刻苦獲得的經驗所提煉出來的精華。它是少數我會毫不猶豫推薦的 JavaScript 書籍。」
—Alex Russell,TC39 成員、Google 軟體工程師
為了真正精通 JavaScript,你必須知道如何有效運用這個語言富有彈性又具表達能力的特色,以及知道如何避免其中常見的陷阱。不管你已經撰寫了多久的 JavaScript 程式碼,Effective JavaScript 都能增進你對這個強大語言的理解,讓你能夠建置更容易預測、更可靠且更容易維護的程式。
作者 David Herman 具有 Ecma 的 JavaScript 標準化委員會數年的工作經驗,他以前所未見的深度闡明這個語言的內部運作原理,幫助你完全掌握 JavaScript 強大的表達能力。立基於 JavaScript 最新的幾個版本,本書提供經過充分驗證的技巧以及最佳實務做法,協助你為未來的開發工作做好準備。
Effective JavaScript 是由 68 個經過驗證、能夠幫助你寫出更好的 JavaScript 程式碼的具體作法所構成,並輔以實例來闡述說明。你會學到如何為每個專案挑選適當的程式寫作風格、管理無法預料的問題,並以更良好的方式來處理 JavaScript 程式設計的各個面向,諸如資料結構或共時性(concurrency)。關鍵的特色包括:
■ 以更好的方式來使用基於原型(prototype)的物件導向程式設計
■ 使用陣列與字典(dictionary)物件時可能遭遇到的細微問題以及它們的解法
■ 對 JavaScript 函式與變數範疇(variable scoping)語意的精確且務實的解說
■ 實用的 JavaScript 程式設計模式與慣用語法,例如選項物件(options objects)及方法鏈串(method chaining)
■ 深入介紹 JavaScript 獨特的「run-to-completion」共時模型
David Herman,Mozilla Research 的資深研究員。他是 Ecma TC39 的成員,這個委員會負責 JavaScript 的標準化工作。他擁有 Grinnell College 的電腦科學學士學位,以及 Northeastern University 的電腦科學碩士與博士學位。
目錄
chapter 01 讓你自己習慣 JavaScript
條款 01 知道你所用的是哪個 JavaScript
條款 02 了解 JavaScript 的浮點數字
條款 03 小心隱含的強制轉型(Implicit Coercions)
條款 04 優先選用基本型別而非物件包覆器
條款 05 避免把==用在混合的型別上
條款 06 了解分號插入的限制
條款 07 把字串想成是 16 位元編碼單位的序列
chapter 02 變數範疇
條款 08 盡量少用全域物件
條款 09 總是宣告區域變數
條款 10 避免使用 with
條款 11 善於使用 Closures
條款 12 了解變數的拉升(Variable Hoisting)
條款 13 使用即刻調用的函式運算式來建立區域範疇
條款 14 小心具名的函式運算式造成不可移植的範疇
條款 15 小心 Block-Local 函式宣告造成不可移植的範疇
條款 16 避免使用 eval 來建立區域變數
條款 17 優先選用間接的 eval 而非直接的 eval
chapter 03 函式的使用
條款 18 了解函式呼叫、方法呼叫以及建構式呼叫之間的差異
條款 19 熟悉高階函式的用法
條款 20 使用 call 以自訂的接收者來呼叫方法
條款 21 使用 apply 以不同數目的引數來呼叫函式
條款 22 使用 arguments 來建立可變參數的函式
條款 23 永不修改 arguments 物件
條款 24 使用一個變數來儲存對 arguments的參考(Reference)
條款 25 使用 bind 擷取出具有固定接收者的方法
條款 26 使用 bind 建立 Curry 函式
條款 27 封裝程式碼時優先選用 Closures 而非使用字串
條款 28 避免仰賴函式的 toString 方法
條款 29 避免非標準的堆疊查閱特性
chapter 04 物件和原型
條款 30 了解 prototype、getPrototypeOf 與 __proto__ 之間的差異
條款 31 優先選用 Object.getPrototypeOf 而非 __proto__
條款 32 永不修改 __proto__
條款 33 不要假設你的建構式會透過 new 來呼叫
條款 34 將方法儲存在原型上
條款 35 使用 Closures 來儲存私有資料
條款 36 只在實體物件上儲存實體狀態
條款 37 認出 this 的隱含繫結
條款 38 從子類別的建構式呼叫超類別的建構式
條款 39 永不重複使用超類別的特性名稱
條款 40 避免繼承標準類別
條款 41 把原型視為是實作細節
條款 42 避免輕率的 Monkey-Patching
chapter 05 陣列與字典
條款 43 從 Object 的直接實體建置出輕量化的字典
條款 44 使用 null 原型來防止原型汙染
條款 45 使用 hasOwnProperty 來防止原型汙染
條款 46 優先選用陣列來建立有序群集而非使用字典
條款 47 不要把可列舉的特性加到 Object.prototype 中
條款 48 避免在列舉時修改一個物件
條款 49 陣列迭代時優先選用 for 迴圈,而非 for...in 迴圈
條款 50 優先使用迭代方法而非迴圈
條款 51 在類陣列物件上重複使用一般化的 Array 方法
條款 52 優先使用陣列字面值而非 Array 建構式
chapter 06 程式庫與 API 設計
條款 53 維持前後一致的慣例
條款 54 把 undefined 視為「沒有值」
條款 55 為關鍵字引數接受選項物件
條款 56 避免非必要的狀態
條款 57 使用結構性定型來設計彈性的介面
條款 58 區別陣列及類陣列物件
條款 59 避免過度的強制轉型
條款 60 支援方法鏈串
chapter 07 共時性
條款 61 別阻斷 I/O 上的事件佇列
條款 62 使用巢狀或具名的回呼函式來進行非同步定序
條款 63 小心遺漏的錯誤
條款 64 使用遞迴來進行非同步迴圈
條款 65 別阻斷計算工作上的事件佇列
條款 66 使用一個計數器來進行共時作業
條款 67 永遠不要同步地呼叫非同步的回呼函式
條款 68 使用 Promises(承諾)來獲得較為乾淨的非同步邏輯
索引
chapter 01 讓你自己習慣 JavaScript
條款 01 知道你所用的是哪個 JavaScript
條款 02 了解 JavaScript 的浮點數字
條款 03 小心隱含的強制轉型(Implicit Coercions)
條款 04 優先選用基本型別而非物件包覆器
條款 05 避免把==用在混合的型別上
條款 06 了解分號插入的限制
條款 07 把字串想成是 16 位元編碼單位的序列
chapter 02 變數範疇
條款 08 盡量少用全域物件
條款 09 總是宣告區域變數
條款 10 避免使用 with
條款 11 善於使用 Closures
條款 12 了解變數的拉升(Variable Hoisting)
條...
購物須知
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。