發表於2024-11-23
Effective JavaScript:編寫高質量JavaScript代碼的68個有效方法 pdf epub mobi txt 電子書 下載
JavaScript標準化委員會著名專傢撰寫,JavaScript語言之父、Mozilla CTO Brendan Eich聯袂數位專傢推薦
作者將在JavaScript標準化委員會工作和實踐的多年經驗濃縮為極具實踐指導意義的68個有效方法,深刻辨析JavaScript的特性和內部運作機製,以及編碼中的陷阱和實踐
海報:
《Effective JavaScript:編寫高質量JavaScript代碼的68個有效方法》共分為7章,分彆涵蓋JavaScript的不同主題。第1章主要講述最基本的主題,如版本、類型轉換要點、運算符注意事項和分號局限等。第2章主要講解變量作用域,介紹此方麵的一些基本概念,以及一些實踐經驗。第3章主要講解函數的使用,深刻解析函數、方法和類,並教會讀者在不同的環境下高效使用函數。第4章主要講解原型和對象,分析JavaScript的繼承機製以及原型和對象使用的實踐和原則。第5章主要介紹數組和字典,闡述將對象作為集閤的用法以及使用數組和字典的一些陷阱。第6章介紹庫和API,講解如何設計良好的API的技巧,以清楚、簡潔和明確地錶達程序,並提高可重用率。第7章講解並發,在技術上討論一些“約定成俗”的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
本書贊譽
譯者序
序
前言
第1章 讓自己習慣JavaScript
第1條:瞭解你使用的JavaScript版本
第2條:理解JavaScript的浮點數
第3條:當心隱式的強製轉換
第4條:原始類型優於封裝對象
第5條:避免對混閤類型使用==運算符
第6條:瞭解分號插入的局限
第7條:視字符串為16位的代碼單元序列
第2章 變量作用域
第8條:盡量少用全局對象
第9條:始終聲明局部變量
第10條:避免使用with
第11條:熟練掌握閉包
第12條:理解變量聲明提升
第13條:使用立即調用的函數錶達式創建局部作用域
第14條:當心命名函數錶達式笨拙的作用域
第15條:當心局部塊函數聲明笨拙的作用域
第16條:避免使用eval創建局部變量
第17條:間接調用eval函數優於直接調用
第3章 使用函數
第18條:理解函數調用、方法調用及構造函數調用之間的不同
第19條:熟練掌握高階函數
第20條:使用call方法自定義接收者來調用方法
第21條:使用apply方法通過不同數量的參數調用函數
第22條:使用arguments創建可變參數的函數
第23條:永遠不要修改arguments對象
第24條:使用變量保存arguments的引用
第25條:使用bind方法提取具有確定接收者的方法
第26條:使用bind方法實現函數柯裏化
第27條:使用閉包而不是字符串來封裝代碼
第28條:不要信賴函數對象的toString方法
第29條:避免使用非標準的棧
檢查屬性
第4章 對象和原型
第30條:理解prototype、getPrototype Of和__proto__之間的不同
第31條:使用Object.getPrototypeOf函數而不要使用__proto__屬性
第32條:始終不要修改__proto__屬性
第33條:使構造函數與new操作符無關
第34條:在原型中存儲方法
第35條:使用閉包存儲私有數據
第36條:隻將實例狀態存儲在實例對象中
第37條:認識到this變量的隱式綁定問題
第38條:在子類的構造函數中調用父類的構造函數
第39條:不要重用父類的屬性名
第40條:避免繼承標準類
第41條:將原型視為實現細節
第42條:避免使用輕率的猴子補丁
第5章 數組和字典
第43條:使用Object的直接實例構造輕量級的字典
第44條:使用null原型以防止原型汙染
第45條:使用hasOwnProperty方法以避免原型汙染
第46條:使用數組而不要使用字典來存儲有序集閤
第47條:絕不要在Object.prototype中增加可枚舉的屬性
第48條:?避免在枚舉期間修改對象
第49條:數組迭代要優先使用for循環而不是for...in循環
第50條:迭代方法優於循環
第51條:在類數組對象上復用通用的數組方法
第52條:數組字麵量優於數組構造函數
第6章 庫和API設計
第53條:保持一緻的約定
第54條:將undefined看做“沒有值”
第55條:接收關鍵字參數的選項對象
第56條:避免不必要的狀態
第57條:使用結構類型設計靈活的接口
第58條:區分數組對象和類數組對象
第59條:避免過度的強製轉換
第60條:支持方法鏈
第7章 並發
第61條:不要阻塞I/O事件隊列
第62條:在異步序列中使用嵌套或命名的迴調函數
第63條:當心丟棄錯誤
第64條:對異步循環使用遞歸
第65條:不要在計算時阻塞事件隊列
第66條:使用計數器來執行並行操作
第67條:絕不要同步地調用異步的迴調函數
第68條:使用promise模式清潔異步邏輯
第1章
讓自己習慣JavaScript
JavaScript最初設計令人感覺親切。由於其語法讓人聯想到Java,並且具有許多腳本語言的共同特性(如函數、數組、字典和正則錶達式),因此,具有少量編程經驗的人也能夠快速學習JavaScript。新手程序員幾乎不需要培訓就可以開始編寫程序,這要歸功於JavaScript語言提供的為數不多的核心概念。
雖然JavaScript是如此的平易近人,但是精通這門語言需要更多的時間,需要更深入地理解它的語義、特性以及最有效的習慣用法。本書每個章節都涵蓋瞭高效JavaScript編程的不同主題。第1章主要講述一些最基本的主題。
第1條:瞭解你使用的JavaScript版本
像大多數成功的技術一樣,JavaScript已經發展瞭一段時間。最初JavaScript作為Java在交互式網頁編程方麵的補充而推嚮市場,但它最終完全取代瞭Java成為主流的Web編程語言。JavaScript的普及使得其於1997年正式成為國際標準,其官方名稱為ECMAScript。目前許多JavaScript的競爭實現都提供瞭ECMAScript標準的各種版本的一緻性。
1999年定稿的第3版ECMAScript標準(通常簡稱為ES3),目前仍是最廣泛采用的JavaScript版本。下一個有重大改進的標準是2009年發布的第5版,即ES5。ES5引入瞭一些新的特性,並且標準化瞭一些受到廣泛支持但之前未規範的特性。由於ES5目前還未得到廣泛支持,所以我會適時指齣本書中的條款或建議是否特定於ES5。
除瞭ECMAScript標準存在多個版本之外,還存在一些JavaScript實現支持非標準特性,而其他的JavaScript實現卻並不支持這些特性的情況。例如,許多JavaScript引擎支持const關鍵字定義變量,但ECMAScript標準並沒有定義任何關於const關鍵字的語義和行為。此外,在不同的實現之間,const關鍵字的行為也不一樣。在某些情況下,const關鍵字修飾的變量不能被更新。
而其他的實現隻是簡單地將const視為var的代名詞。
由於JavaScript曆史悠久且實現多樣化,因此我們很難確定哪些特性在哪些平颱上是可用的。而令事態更加嚴峻的事實是JavaScript的主要生態係統——Web瀏覽器,它並不支持讓程序員指定某個JavaScript的版本來執行代碼。由於最終用戶可能使用不同Web瀏覽器的不同版本,因此,我們必須精心地編寫Web程序,使得其在所有的瀏覽器上始終工作如一。
另外,JavaScript並不隻是針對客戶端Web編程。JavaScript的其他應用包括服務器端程序、瀏覽器擴展以及針對移動和桌麵應用程序的腳本。某些情況下你可能需要一個特定的JavaScript版本。對於這些情況,利用特定平颱支持的JavaScript特定實現的額外特性是有意義的。
本書主要關注的是JavaScript的標準特性,但是也會討論一些廣泛支持的非標準特性。當涉及新標準特性或非標準特性時,瞭解你的應用程序運行環境是否支持這些特性是至關重要的。否則,你可能會麵臨這樣的睏境——應用程序在你自己的計算機或者測試環境上運行良好,但是將它部署在不同的産品環境中時卻無法運行。例如,const關鍵字在支持非標準特性的JavaScript引擎上測試時運行良好,但是,當將它部署在不識彆const關鍵字的Web瀏覽器上時就會齣現語法錯誤。
ES5引入瞭另一種版本控製的考量——嚴格模式(strict mode)。此特性允許你選擇在受限製的JavaScript版本中禁止使用一些JavaScript語言中問題較多或易於齣錯的特性。由於其語法設計嚮後兼容,因此即使在那些沒有實現嚴格模式檢查的環境中仍然可以執行嚴格代碼(strict code)。在程序中啓用嚴格模式的方式是在程序的最開始增加一個特定的字符串字麵量(literal)。
同樣,你也可以在函數體的開始處加入這句指令以啓用該函數的嚴格模式。
使用字符串字麵量作為指令語法看起來有點怪異,但它的好處是嚮後兼容。由於解釋執行字符串字麵量並沒有任何副作用,所以ES3引擎執行這條指令是無傷大雅的。ES3引擎解釋執行該字符串,然後立即丟棄其值。這使得編寫的嚴格模式的代碼可以運行在舊的JavaScript引擎上,但有一個重要的限製:舊的引擎不會進行任何的嚴格模式檢查。如果你沒有在ES5環境中做過測試,那麼,編寫的代碼運行於ES5環境中就很容易齣錯。
……
學習一門編程語言,需要熟悉它的語法、形式和結構,這樣我們纔能編寫閤法的、符閤語義的、具有意義和行為正確的程序。但除此之外,掌握一門語言需要理解其語用,即使用語言特性構建高效程序的方法。後一種範疇是特彆微妙的,尤其是對JavaScript這樣一種靈活而富有錶現力的編程語言來說。
這是一本關於JavaScript語用學的書。這不是一本入門書籍,我假設你在一定程度上熟悉瞭JavaScript和通常的編程。很多優秀的JavaScript入門書籍可供參考,例如,DouglasCrockford的《JavaScript:TheGoodParts》和MarijnHaverbeke的《EloquentJavaScript》。本書的目的是幫助你加深理解如何有效地使用JavaScript構建更可預測、可靠和可維護的JavaScript應用程序和庫。
JavaScript與ECMAScript
在深入本書之前澄清一些術語是有必要的。這是一本關於舉世皆知的JavaScript編程語言的書籍。然而,官方標準定義的規範的描述是一門稱該語言為ECMAScript。曆史很令人費解,但這可以歸結為版權問題:齣於法律原因,Ecma國際標準化組織不能使用“JavaScript”作為其標準名稱。(更糟的是,標準化組織將其原來的名稱ECMA(歐洲計算機製造商協會的英文首字縮寫)改為不是全大寫的Ecma國際標準化組織。彼時,ECMAScript這個名字大約也是早已注定。)
正式來說,當人們提到ECMAScript時,通常是指由Ecma國際標準化組織製定的“理想”語言。與此同時,JavaScript這個名字意味著來自語言本身的所有事物,例如某個供應商特定的JavaScript引擎。通常情況下,人們經常交替使用這兩個術語。為瞭保持清晰度和一緻性,在本書中,我將隻使用ECMAScript來談論官方標準,其他情況,我會使用JavaScript指代語言。我還會使用常見的縮寫ES5來指代第5版的ECMAScript標準。
關於Web
避開Web來談JavaScript是很難的。到目前為止,JavaScript是唯一為用於客戶端應用程序腳本的所有主流瀏覽器提供內置支持的編程語言。此外,近年來,隨著Node.js平颱的問世,JavaScript已經成為一個實現服務器端應用程序的流行編程語言。
不過,本書是關於JavaScript而非Web的編程。有時,談論一些Web相關的例子和應用程序的概念是幫助讀者理解。但是,這本書的重點是JavaScript語言的語法、語義和語用,而不是Web平颱的API和技術。
關於並發
JavaScript一個新奇的方麵是在並發環境中其行為是完全不明朗的。ECMAScript標準(包括第5版)關於JavaScript程序在交互式或並發環境中的行為隻字未提。第7章涉及並發,因此,我隻是從技術角度介紹一些非官方的JavaScript特性。但實際上,所有主流的JavaScript引擎都有一個共同的並發模型。盡管在標準中未提及並發,但是緻力於並發和交互式的程序是JavaScript編程的一個核心概念。事實上,未來版本的ECMAScript標準可能會正式地標準化這些JavaScript並發模型的共享方麵。
緻謝
這本書在很大程度上要歸功於JavaScript的發明者——BrendanEich。我深深感謝Brendan邀請我參與JavaScript標準化工作,以及他對我在Mozilla的職業生涯中給予的指導和支持。
本書中的大部分材料是受優秀的博客文章和在綫論文的啓發。我從Ben“cowboy”Alman、ErikArvidsson、MathiasBynens、Tim“creationix”Caswell、Michaeljohn“inimino”Clement、AngusCroll、AndrewDupont、AriyaHidayat、StevenLevithan、PanThomakos、JeffWalden,以及Juriy“kangax”Zaytsev的博客中學到很多東西。當然,本書的最終資源來自ECMAScript規範。ECMAScript規範自第5版以來由AllenWirfs-Brock不知疲倦地編輯和更新。Mozilla開發者網絡仍然是JavaScriptAPI和特性最令人印象深刻的、高品質在綫資源之一。
在策劃和寫作這本書的過程中,我有許多顧問。在我開始寫作之前,JohnResig就以作者的角度給瞭我很多有用的建議。BlakeKaplan和PatrickWalton幫我在早期階段整理我的想法和規劃齣這本書的組織結構。在寫作的過程中,我從BrianAnderson、NorbertLindenberg、SamTobin-Hochstadt、RickWaldron和PatrickWalton那裏得到瞭很好的建議。
很高興能夠和Pearson的工作人員共事。OliviaBasegio、AudreyDoyle、TrinaMacDonald、ScottMeyers和ChrisZahn一直關注我提齣的問題,對我的拖延報以耐心,並通融我的請求。我無法想象還能有一個更愉快的寫作經曆。我對能為Effective係列寫一本書感到非常榮幸。因為很久以前我就是《EffectiveC++》的粉絲,我曾經懷疑我是否有親自書寫一本Effective係列書籍的榮幸。
我也簡直不敢相信自己有這樣的好運氣,能夠找到夢之隊一樣的技術編輯。我很榮幸ErikArvidsson、RebeccaMurphey、RickWaldron和RichardWorth同意編輯這本書,他們為我提供瞭許多寶貴的批評和建議。他們多次糾正瞭書中一些真正令人尷尬的錯誤。
寫一本書比我預想的要難得多。如果不是朋友和同事的支持,我可能已經失去瞭勇氣。在我懷疑自己的時候,AndyDenmark、RickWaldron和TravisWinfrey總是給予我鼓勵。
我絕大部分時候是在舊金山柏麗附近的神話般的JavaBeach咖啡廳裏寫作這本書的。那裏的工作人員都知道我的名字,並且我還沒點餐之前,他們就知道我想要點什麼。我很感謝他們提供瞭一個舒適的工作場所,並給我提供食物和咖啡。
我的毛茸茸的貓科小友Schmoopy為本書做齣瞭它的最大貢獻。至少,它不停地跳上我的膝蓋,坐在屏幕前(有可能是筆記本電腦比較溫暖)。Schmoopy自2006年以來一直是我的忠實夥伴,我不能想象我的生活能離得開這個小毛球。
我的
Effective JavaScript:編寫高質量JavaScript代碼的68個有效方法 下載 mobi epub pdf txt 電子書
一本很精緻的小冊子,被推薦瞭,看後評價
評分書不錯,京東物流牛叉!!!
評分好評
評分在學習的性價比問題上鳳飛飛生意人一樣精明。每分每秒,都要花在有分數的地方;沒有分的,堅決不看、不問、不琢磨、不圍觀。還要記得二八法則,80%的分數,一定是你在20%的時間裏掙到的,所以要把最重要、分數最多的章節,放在第一時間搞透徹。
評分要學會把書拆開來看,寫教材,當然要從基礎寫起,最後寫屋麵;讀書的過程就不能拘泥於此,如果屋麵考10分,基礎考3分,我當然先看屋麵,後看基礎。
評分不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯
評分好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好
評分好
評分算是好書吧,放著慢慢看
Effective JavaScript:編寫高質量JavaScript代碼的68個有效方法 pdf epub mobi txt 電子書 下載