Effective Javascript:編寫高質量JavaScript代碼的68個有效方法(英文版) pdf epub mobi txt 電子書 下載 2024
産品特色
編輯推薦
適讀人群 :JavaScript程序員及愛好者。 通過全書歸納的68個行之有效的方法和大量具體實例,你將學會:
更好地使用基於原型的麵嚮對象編程方式
數組和字典對象的微妙區彆和解決方案
JavaScript函數和變量作用域語義方麵的精確、務實的解說
一些有用的JavaScript編程模式和慣用法,比如選項對象和方法鏈
使用JavaScript獨特的“運行到完成”的方式深入闡釋並發
內容簡介
本書由資深 JavaScript 技術專傢 David Herman 所著。書中基於 JavaScript 標準的新版本闡明瞭 JavaScript 語言的內部運作機製――幫助你充分利用 JavaScript 語言的錶現力。通過全書歸納的 68 個行之有效的方法和大量具體實例,作者詳細講解瞭如何更有效地運用這門靈活且富有錶現力的語言,以及如何規避其缺陷。你將學到如何選擇正確的編程風格,管理一些超齣意料的問題,以及成功使用 JavaScript 編程完成從數據結構到並發的方方麵麵。
無論你寫瞭多久的 JavaScript 代碼,本書都將有助於增進你對這門強大的編程語言的理解,助你編寫更可預測、更可靠且具維護性的程序。
作者簡介
David Herman,資深JavaScript技術專傢,Ecma TC39委員會成員,負責JavaScript的標準化工作。他擁有格林內爾學院的計算機科學學士學位和美國東北大學的計算機科學碩士及博士學位,現任Mozilla研究院高級研究員。
精彩書評
這是一本絕不辜負 Effective 軟件開發係列期望的編程書籍。對於任何一位想要做到嚴謹編程的 JavaScript 開發者來說,這本書絕對不容錯過。本書闡述瞭 JavaScript 內部工作細節,以期幫助讀者更好地利用 JavaScript 語言優勢。
——Erik Arvidsson,高級軟件工程師
很少有像 David 這樣的編程語言極客能如此舒適、 友好地講解編程語言。他帶我們領會 JavaScript 的語法和語義,這個過程既令人陶醉又極其深刻。本書以舒適的節奏額外提供瞭一些“有問題”的現實案例。當讀完這本書後,你會感覺自己獲得瞭一種強大而全麵的掌控能力。
——Paul Irish,Google Chrome 開發主管
在閱讀本書之前,我以為它隻是另一本關於如何更好地使用 JavaScript 編程的書籍。然而它遠不止如此,它還會使你更深入地理解 JavaScript 這門語言,這一點至關重要。如果沒有這層對 JavaScript 的深入理解,那麼你絕不會懂得語言本身的任何東西,知道其他的程序員是如何編寫代碼的。
如果你想成為一名真正優秀的 JavaScript 開發者,那麼請閱讀此書。就我而言,我多麼希望在一次用 JavaScript 編程時就已經閱讀瞭它。
——Anton Kovalyov,JSHint 開發者
如果你正在尋找一本正式且極具可讀性及洞察力的 JavaScript 語言書籍的話,那不用捨近求遠瞭。JavaScript 開發者能夠從其中找到珍貴的知識寶藏,甚至技術精湛的 JavaScript 程序員也一定能從中獲益。對於有其他語言經驗而想一頭紮進 JavaScript 世界的從業人員來說,本書是迅速學習 JavaScript 的必讀之物。然而,不管你的背景如何,都不得不承認作者 Dave Herman 在探索 JavaScript 方麵做得非常棒——JavaScript 的優勢部分、不足部分或介於兩者之間的所有內容都囊括於本書之中。
——Rebecca Murphey,Bocoup 高級 JavaScript 開發者
對於任何一位理解 JavaScript 並且想要完全掌握它的人來說,本書都是必不可少的讀物。Dave Herman 帶給瞭讀者深刻的、具有研究和實踐意義的 JavaScript 語言理解,通過一個接一個的例子指導並幫助讀者達到與他同樣的理解高度。這不是一本尋求捷徑的書籍,恰恰相反,它是一本難得的將經驗提煉為指南的書籍。它是一本為數不多讓我毫不猶豫推薦的關於 JavaScript 的書籍。
——Alex Russell,TC39 成員,Google 軟件工程師
很少有人能有機會學到大師的手藝。這本書彌補瞭這種遺憾,其對 JavaScript 的研究就像隨一位時間旅行哲學傢迴到公元前 5 世紀與柏拉圖一同學習一般。
——Rick Waldron,JavaScript 傳教士,Bocoup
目錄
推薦序
前言
緻謝
關於作者
Chapter 1: Accustoming Yourself to JavaScript
Item 1: Know Which JavaScript You Are Using
Item 2: Understand JavaScript’s Floating-Point Numbers
Item 3: Beware of Implicit Coercions
Item 4: Prefer Primitives to Object Wrappers
Item 5: Avoid using == with Mixed Types
Item 6: Learn the Limits of Semicolon Insertion
Item 7: Think of Strings As Sequences of 16-Bit Code Units
Chapter 2: Variable Scope
Item 8: Minimize Use of the Global Object
Item 9: Always Declare Local Variables
Item 10: Avoid with
Item 11: Get Comfortable with Closures
Item 12: Understand Variable Hoisting
Item 13: Use Immediately Invoked Function Expressions to Create Local Scopes
Item 14: Beware of Unportable Scoping of Named Function Expressions
Item 15: Beware of Unportable Scoping of Block-Local Function Declarations
Item 16: Avoid Creating Local Variables with eval
Item 17: Prefer Indirect eval to Direct eval
Chapter 3: Working with Functions
Item 18: Understand the Difference between Function, Method, and Constructor Calls
Item 19: Get Comfortable Using Higher-Order Functions
Item 20: Use call to Call Methods with a Custom Receiver
Item 21: Use apply to Call Functions with Different Numbers of Arguments
Item 22: Use arguments to Create Variadic Functions
Item 23: Never Modify the arguments Object
Item 24: Use a Variable to Save a Reference to arguments
Item 25: Use bind to Extract Methods with a Fixed Receiver
Item 26: Use bind to Curry Functions
Item 27: Prefer Closures to Strings for Encapsulating Code
Item 28: Avoid Relying on the toString Method of Functions
Item 29: Avoid Nonstandard Stack Inspection Properties
Chapter 4: Objects and Prototypes
Item 30: Understand the Difference between prototype, getPrototypeOf, and__proto__
Item 31: Prefer Object.getPrototypeOf to __proto__
Item 32: Never Modify __proto__
Item 33: Make Your Constructors new-Agnostic
Item 34: Store Methods on Prototypes
Item 35: Use Closures to Store Private Data
Item 36: Store Instance State Only on Instance Objects
Item 37: Recognize the Implicit Binding of this
Item 38: Call Superclass Constructors from Subclass Constructors
Item 39: Never Reuse Superclass Property Names
Item 40: Avoid Inheriting from Standard Classes
Item 41: Treat Prototypes As an Implementation Detail
Item 42: Avoid Reckless Monkey-Patching
Chapter 5: Arrays and Dictionaries
Item 43: Build Lightweight Dictionaries from Direct Instances of Object
Item 44: Use null Prototypes to Prevent Prototype Pollution
Item 45: Use hasOwnProperty to Protect Against Prototype Pollution
Item 46: Prefer Arrays to Dictionaries for Ordered Collections
Item 47: Never Add Enumerable Properties to Object.prototype
Item 48: Avoid Modifying an Object during Enumeration
Item 49: Prefer for Loops to for...in Loops for Array Iteration
Item 50: Prefer Iteration Methods to Loops
Item 51: Reuse Generic Array Methods on Array-Like Objects
Item 52: Prefer Array Literals to the Array Constructor
Chapter 6: Library and API Design
Item 53: Maintain Consistent Conventions
Item 54: Treat undefined As “No Value”
Item 55: Accept Options Objects for Keyword Arguments
Item 56: Avoid Unnecessary State
Item 57: Use Structural Typing for Flexible Interfaces
Item 58: Distinguish between Array and Array-Like
Item 59: Avoid Excessive Coercion
Item 60: Support Method Chaining
Chapter 7: Concurrency
Item 61: Don’t Block the Event Queue on I/O
Item 62: Use Nested or Named Callbacks for Asynchronous Sequencing
Item 63: Be Aware of Dropped Errors
Item 64: Use Recursion for Asynchronous Loops
Item 65: Don’t Block the Event Queue on Computation
Item 66: Use a Counter to Perform Concurrent Operations
Item 67: Never Call Asynchronous Callbacks Synchronously
Item 68: Use Promises for Cleaner Asynchronous Logic
Index
前言/序言
推薦序
眾所周知,我在1995年5月用10天時間創建瞭JavaScript語言。迫於現實的壓力和衝突管理的勢在必行,我將JavaScript設計為“看起來像Java”、“對初學者來說極簡單”、“在網景瀏覽器中幾乎能控製它的一切”的編程語言。
鑒於極具挑戰性的要求和非常短的時間錶,我的解決方案除瞭正確獲得瞭兩大特性(第一類函數、對象原型)之外,還將JavaScript設計得從一開始就極具延展性。我知道一些開發者不得不為最開始的幾個版本“打補丁”來修正錯誤,這些先驅的方法比我使用內置庫鬍亂拼湊的方法要好。舉例來說,雖然許多編程語言都限製瞭可變性,在運行時不能修改或擴展內置對象,或者標準庫的名稱綁定不能通過賦值被覆蓋,但是JavaScript幾乎允許完全改變每個對象。
總的來說,我相信這是一個很好的設計決定。它明確瞭某些領域的挑戰(如在瀏覽器的安全邊界內,安全地混用可信和不可信的代碼)。對於JavaScript來說,支持所謂的猴子補丁是很重要的。憑藉它,開發者可以編輯標準對象來解決Bug和仿效“未來”的功能改造一些舊的瀏覽器(稱為polyfill庫的shim,在美式英語中稱為spackle)。
除瞭這些平凡的應用之外,JavaScript的可塑性鼓勵用戶沿著幾個更富有創造性的方嚮形成和發展創新網絡。這使得用戶仿效其他編程語言,創建瞭許多工具包和框架庫:基於Ruby的Prototype、基於Python的MochiKit、基於Java的Dojo及基於Smalltalk的TIBET。隨後是jQuery庫(“JavaScript的新浪潮”),2007年,我第一次看到它,我覺得自己似乎是一個後來者。它暴風雨般地引領著JavaScript的世界,異於其他編程語言,從舊的JavaScript庫中學習,開闢瞭瀏覽器的“查詢和做”(query and do)模型,從根本上簡化瞭瀏覽器。
這引領著JavaScript用戶群及其創新網絡,使JavaScript的風格自成一派。這種風格仍在仿效和簡化其他的程序庫,也促成瞭現代Web標準化的工作。
在這一演變過程中,JavaScript保持瞭嚮後兼容,當然默認情況下,它是可變的。另外,在ECMAScript標準最新的版本中新增瞭一些方法來凍結對象和封閉對象的屬性,以防止對象擴展和屬性被覆蓋。JavaScript的演進之旅遠未結束。這就像生活的語言和生物係統一樣,變化始終存在。在此之前,我無法預見一個單一的橫掃其他程序庫的“標準庫”或編碼風格。
任何語言都是怪癖的,或者語言幾乎都是受限地執行常見的上佳實踐。JavaScript是一門怪癖的或者充滿限製主義色彩的編程語言。因此,與大多數其他的編程語言相比,想要高效地使用JavaScript編程,開發人員必須學習和追求優秀的風格、正確的用法和上佳的實踐。當考慮如何做到最高效,我相信避免過度編程和構建剛性或教條式的風格指南是至關重要的。
本書以一種平衡的方式講解JavaScript編程。它基於一些具體的實證和經驗,而不迂迴於剛性或過度的方法。我認為對於許多尋找在不犧牲錶現力的前提下,還可以自由采用新思想和編程範式來編寫高效JavaScript的人來說,本書是一位重要的助手和可信賴的嚮導。它也是一本備受關注、充滿樂趣和擁有許多令人嘆為觀止的示例的讀物。
最後,自2006年以來,我有幸結識David Herman。那是我第一次以Mozilla代錶的身份邀請他作為特邀專傢在Ecma標準化機構工作。Dave深刻、謙遜的專傢意見及他的熱情讓JavaScript在書中的每一頁大放異彩。本書精彩絕倫!
——Brendan Eich
Effective Javascript:編寫高質量JavaScript代碼的68個有效方法(英文版) 下載 mobi epub pdf txt 電子書
Effective Javascript:編寫高質量JavaScript代碼的68個有效方法(英文版) pdf epub mobi txt 電子書 下載