JavaScript編程精解(原書第2版)

JavaScript編程精解(原書第2版) pdf epub mobi txt 電子書 下載 2025

[美] 馬爾奇·哈弗貝剋 著,盧譽聲 譯
圖書標籤:
  • JavaScript
  • 編程
  • 前端開發
  • Web開發
  • 算法
  • 數據結構
  • ES6
  • 現代JavaScript
  • 入門
  • 進階
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 機械工業齣版社
ISBN:9787111518600
版次:1
商品編碼:11807430
品牌:機工齣版
包裝:平裝
叢書名: Web開發技術叢書
開本:16開
齣版時間:2015-11-01
用紙:膠版紙
頁數:325

具體描述

編輯推薦

  

世JavaScript之父Brendan Eich高度評價並強力推薦

JavaScript編程原理與運用規則完美融閤,讀者將在遊戲式開發中學會JavaScript程序設計,是係統學習JavaScript程序設計的作品


  

JavaScript幾乎可以說是所有現代Web應用程序的核心,無論是社交應用程序,還是時下流行的瀏覽器遊戲。雖說學習和使用JavaScript的成本並不高,但是它卻是一種靈活且復雜的編程語言,你可以用它來構建功能全麵且復雜的應用程序。
  
  本書深入剖析瞭JavaScript編程語言的內部細節,並闡述瞭編寫優雅高效代碼的方法。作者Marijn Haverbeke從示例代碼開始講解,逐步實現瞭完整的項目,與此同時作者還提供瞭一係列習題供讀者練習,你可以從中學習並瞭解如何編寫自己的程序。
  
  通過閱讀本書,你將學習和瞭解到:
  編程的基本要素,這其中包括語法、控製流和數據。
  如何組織和創建麵嚮對象的代碼以及函數式編程的技術。
  如何在瀏覽器當中編寫腳本和創建基本Web應用程序。
  如何使用DOM與瀏覽器進行高效交互。
  如何通過Node.js來構建服務器和工具。
  
  本書的第2版經過全麵的更新和修訂,覆蓋瞭JavaScript的絕大多數語言特性,涉及Web編程和Node.js服務器編程,以及JavaScript性能優化等。本書的在綫網站提供瞭所有源代碼,你可以通過在綫沙箱來編輯、運行代碼,並實時查看輸齣結果。

內容簡介

  

  JavaScript是一門流行的程序設計語言,在這個Web的時代中,其地位已經變得越來越舉足輕重。本書從JavaScript的基本語言特性入手,詳細講解JavaScript的語法,並通過一些實例,講解使用其解決實際問題的方法與思路。同時又結閤網頁開發與Node.js講解JavaScript在Web前端開發與服務端開發中的作用,可以為讀者快速學習掌握JavaScript提供係統指導。

??

  本書共分為三個部分。第一部分主要討論JavaScript的語言特性。第1~4章介紹JavaScript語言的基本結構,包括控製結構、函數和數據結構。第5~6章深入探討函數與對象,並介紹如何控製代碼復雜度。第7章是實例項目,介紹如何使用基本的JavaScript語法解決實際問題。第8章介紹如何處理錯誤,第9章介紹正則錶達式與JavaScript中正則錶達式的用法。第10章介紹如何在JavaScript中構建使用模塊。第11章作為第一部分的結尾,介紹如何設計並構建一個程序語言解析器。第二部分主要講解如何在瀏覽器中運用JavaScript。第12章介紹JavaScript與瀏覽器的曆史與關係。第13章介紹瞭瀏覽器的DOM模型。第14章介紹如何使用JavaScript處理DOM事件。第15章介紹如何通過操縱DOM來編寫一個瀏覽器中的2D遊戲。第16章介紹HTML5中的畫布,並介紹如何使用JavaScript繪圖。第17章介紹HTTP協議,以及如何使用JavaScript進行網絡通信。第18章介紹錶單與其使用方法。第19章是另一個實例項目,介紹如何開發一個基於HTML的繪圖程序,是對第二部分的總結。第三部分是提高部分。第20章介紹如何使用Node.js開發Web服務,體現齣JavaScript的強大威力。第21章介紹如何使用JavaScript完成一個完整的Web應用。最後一章則介紹提升JavaScript性能的一些基本原則與方法,並給齣一些實例。

作者簡介

  作者簡介

  馬爾奇·哈弗貝剋(Marijn Haverbeke),

  JavaScript程序員,通曉多種編程語言,在Web開發方麵積纍瞭豐富的經驗,在JavaScript領域頗有影響力。此外,他創建並維護著多個流行的開源項目,如CodeMirror編輯器和Tern類型推導引擎等。


  譯者簡介

  盧譽聲,軟件工程師,擅長C++多綫程編程和實時分布式係統架構。曾在思科係統(中國)研發中心雲産品研發部工作多年。他曾參與服務器後端、前端以及SDK的設計與研發工作,在大規模分布式係統設計與實現、性能調優、高可用性和自動化等方麵積纍瞭豐富的敏捷實踐與開發經驗。現在在美國某IT/互聯網公司工作,從事C++底層通信係統設計與研發。此外,他從事C/C++研發工作,對Java、JavaScript、Lua以及移動開發平颱等也有一定研究。

目錄

譯者序
贊譽
前言
第一部分 JavaScript編程語言
第1章 值、類型和運算符 2
1.1 值 2
1.2 數字 3
1.3 字符串 5
1.4 一元運算符 6
1.5 布爾值 6
1.6 未定義值 8
1.7 自動類型轉換 8
1.8 本章小結 10
第2章 程序結構 11
2.1 錶達式和語句 11
2.2 變量 12
2.3 關鍵字和保留字 13
2.4 環境 14
2.5 函數 14
2.6 console.log函數 14
2.7 返迴值 15
2.8 prompt和confirm函數 15
2.9 控製流 16
2.10 條件執行 16
2.11 while和do循環 17
2.12 代碼縮進 19
2.13 for循環 19
2.14 跳齣循環 20
2.15 更新變量的簡便方法 21
2.16 switch條件分支 21
2.17 大寫 22
2.18 注釋 22
2.19 本章小結 23
2.20 習題 23
第3章 函數 25
3.1 定義函數 25
3.2 參數和作用域 26
3.3 嵌套作用域 27
3.4 函數值 28
3.5 符號聲明 29
3.6 調用棧 29
3.7 可選參數 31
3.8 閉包 31
3.9 遞歸 32
3.10 添加新函數 35
3.11 函數及其副作用 37
3.12 本章小結 37
3.13 習題 38
第4章 數據結構:對象和數組 39
4.1 鬆鼠人 39
4.2 數據集 40
4.3 屬性 41
4.4 方法 41
4.5 對象 42
4.6 可變性 44
4.7 鬆鼠人的記錄 45
4.8 計算關聯性 47
4.9 對象映射 48
4.10 分析結果 49
4.11 詳解數組 50
4.12 字符串及其屬性 51
4.13 arguments對象 52
4.14 Math對象 53
4.15 全局對象 55
4.16 本章小結 55
4.17 習題 55
第5章 高階函數 58
5.1 抽象 59
5.2 數組遍曆抽象 59
5.3 高階函數 61
5.4 參數傳遞 62
5.5 JSON 63
5.6 數組過濾 64
5.7 使用map函數轉換數組 65
5.8 使用reduce進行數據匯總 65
5.9 可組閤性 66
5.10 性能開銷 67
5.11 曾曾曾曾……祖父 67
5.12 綁定 70
5.13 本章小結 70
5.14 習題 71
第6章 深入理解對象 72
6.1 曆史 72
6.2 方法 73
6.3 原型 74
6.4 構造函數 75
6.5 覆蓋繼承的屬性 76
6.6 原型汙染 77
6.7 無原型對象 79
6.8 多態 79
6.9 繪製錶格 80
6.10 Getter與Setter 84
6.11 繼承 85
6.12 instanceof運算符 87
6.13 本章小結 87
6.14 習題 88
第7章 項目實戰:構建電子生態
 係統 89
7.1 定義 89
7.2 描述世界 90
7.3 動物的編程接口 91
7.4 World對象 93
7.5 this及其作用域 94
7.6 賦予生命 96
7.7 動物的爬行動作 98
7.8 更多動物 98
7.9 更逼真的生態係統仿真 99
7.10 動作處理器 100
7.11 充實這個新世界 102
7.12 讓虛擬世界生機盎然 103
7.13 習題 104
第8章 處理缺陷與錯誤 105
8.1 開發人員造成的問題 105
8.2 嚴格模式 106
8.3 測試 107
8.4 調試 108
8.5 錯誤傳播 109
8.6 異常 110
8.7 異常後清理 111
8.8 選擇性捕獲 112
8.9 斷言 114
8.10 本章小結 115
8.11 習題 115
第9章 正則錶達式 116
9.1 創建正則錶達式 116
9.2 匹配測試 117
9.3 匹配字符集 117
9.4 部分模式重復 118
9.5 子錶達式分組 119
9.6 匹配和分組 119
9.7 日期類型 120
9.8 單詞和字符串邊界 121
9.9 選項模式 122
9.10 匹配原理 122
9.11 迴溯 123
9.12 replace方法 125
9.13 貪婪模式 126
9.14 動態創建RegExp對象 127
9.15 search方法 128
9.16 lastIndex屬性 128
9.17 解析INI文件 129
9.18 國際化字符 131
9.19 本章小結 131
9.20 習題 132
第10章 模塊 134
10.1 模塊的好處 134
10.2 使用函數作為命名空間 136
10.3 使用對象作為接口 137
10.4 與全局作用域分離 138
10.5 將數據作為代碼執行 138
10.6 require函數 139
10.7 模塊加載過慢的問題 140
10.8 接口設計 143
10.9 本章小結 144
10.10 習題 145
第11章 項目實戰:開發編程語言 147
11.1 解析 147
11.2 代碼執行器 150
11.3 特殊形式 151
11.4 環境 153
11.5 函數 154
11.6 編譯 155
11.7 站在彆人的肩膀上 155
11.8 習題 156
第二部分 在瀏覽器中使用JavaScript
第12章 瀏覽器中的JavaScript 160
12.1 網絡和Internet 160
12.2 Web 161
12.3 HTML 162
12.4 HTML和JavaScript 164
12.5 沙箱 164
12.6 兼容性與瀏覽器之爭 165
第13章 文檔對象模型 166
13.1 文檔結構 166
13.2 樹 167
13.3 標準 168
13.4 通過樹結構訪問節點 169
13.5 查找元素 170
13.6 修改文檔 170
13.7 創建節點 171
13.8 屬性 173
13.9 布局 175
13.10 樣式 176
13.11 層疊樣式 177
13.12 查詢選擇器 178
13.13 位置與動畫 179
13.14 本章小結 181
13.15 習題 181
第14章 處理事件 183
14.1 事件處理器 183
14.2 事件與DOM節點 184
14.3 事件對象 184
14.4 傳播 185
14.5 默認動作 186
14.6 按鍵事件 187
14.7 鼠標點擊 188
14.8 鼠標移動 189
14.9 滾動事件 191
14.10 焦點事件 192
14.11 加載事件 192
14.12 腳本執行時間綫 193
14.13 設置定時器 193
14.14 降頻 194
14.15 本章小結 195
14.16 習題 196
第15章 項目實戰:平颱遊戲 198
15.1 遊戲 198
15.2 實現技術 199
15.3 關卡 199
15.4 讀取關卡 200
15.5 活動元素 201
15.6 當封裝成為負擔 203
15.7 繪圖 204
15.8 動作與衝突 208
15.9 活動元素與動作 209
15.10 跟蹤按鍵 213
15.11 運行遊戲 213
15.12 習題 215
第16章 使用canvas繪圖 217
16.1 SVG 217
16.2 canvas元素 218
16.3 填充與描邊 219
16.4 路徑 220
16.5 麯綫 221
16.6 繪製餅狀圖 224
16.7 文本 225
16.8 圖像 225
16.9 變換 227
16.10 存儲與清除圖像的變換狀態 228
16.11 迴到遊戲 230
16.12 選擇圖像接口 234
16.13 本章小結 235
16.14 習題 235
第17章 HTTP協議概述 237
17.1 協議簡介 237
17.2 瀏覽器和HTTP 238
17.3 XMLHttpRequest 240
17.4 發送請求 240
17.5 異步請求 241
17.6 獲取XML數據 242
17.7 HTTP沙箱 242
17.8 抽象請求 243
17.9 Promise 245
17.10 運用HTTP 247
17.11 安全和HTTPS 247
17.12 本章小結 248
17.13 習題 248
第18章 錶單和錶單域 250
18.1 域 250
18.2 聚焦 252
18.3 禁用域 252
18.4 作為整體的錶單 253
18.5 文本域 254
18.6 選擇框和單選框 255
18.7 選擇域 256
18.8 文件域 257
18.9 客戶端保存數據 259
18.10 本章小結 261
18.11 習題 261
第19章 項目實戰:繪圖程序 263
19.1 實現 263
19.2 建立DOM 264
19.3 基礎 265
19.4 工具選擇 265
19.5 顔色和畫刷大小 267
19.6 保存 269
19.7 加載圖片文件 270
19.8 完成 271
19.9 習題 272
第三部分 高級主題
第20章 Node.js 276
20.1 背景 276
20.2 異步性 277
20.3 node命令 278
20.4 模塊 278
20.5 使用NPM安裝 279
20.6 文件係統模塊 281
20.7 HTTP模塊 282
20.8 流 283
20.9 簡單的文件服務器 284
20.10 錯誤處理 288
20.11 本章小結 290
20.12 習題 290
第21章 項目實戰:技能分享網站 293
21.1 設計 293
21.2 長輪詢 294
21.3 HTTP接口 295
21.4 服務器 297
21.5 客戶端 303
21.6 習題 309
第22章 JavaScript和性能 311
22.1 分階段編譯 311
22.2 圖形布局 312
22.3 定義圖 313
22.4 第一個力導嚮布局函數 314
22.5 性能分析 316
22.6 函數內聯 317
22.7 退化迴舊式循環 318
22.8 避免工作 319
22.9 産生更少的垃圾 319
22.10 垃圾迴收 320
22.11 修改對象 321
22.12 動態類型 322
22.13 本章小結 323
22.14 習題 324










前言/序言

  本書講解如何通過編程來讓計算機執行任務。時至今日,計算機就像螺絲刀一樣隨處可見,但相比於螺絲刀而言,計算機中包含瞭更多隱含的復雜性,因此也更加難以理解和操作。許多人仍對計算機感到陌生和恐懼。  一邊是有血有肉的具備社交纔能和空間推理能力的人類,另一邊是冰冷的處理二進製數據的計算機,這兩者該如何進行交互呢?我們已經找到瞭兩種高效的方式來搭建人類與計算機之間通信的橋梁。種方法是模擬現實世界來構建與計算機交互的接口,這樣我們就可以動動手指來操作計算機屏幕上的圖形。對於一般的機器交互來說,這種方式非常實用。  但是,我們在使用這種方法的情況下,隻能通過點擊操作實現接口設計者預先定義好的功能。幸運的是,我們可以利用人類的語言天賦來教會計算機一門語言,實現開放式接口。比如指揮計算機執行任意一種任務。  人類語言可以用多種方式來組閤單詞和短語,錶述齣不同的信息。雖然計算機語言的語法靈活性沒那麼高,但也是采用瞭類似的原則進行設計的。  在過去的20年中,越來越多的人開始使用計算機來進行簡易的運算,曾經作為默認人機交互方式的命令行接口,現如今已經被圖形界麵所取代。但隻要你細心觀察,就會發現基於語言的接口仍在那裏。比如JavaScript語言,你幾乎可以在每個網頁瀏覽器中找到它的身影,而消費者的設備都可以執行這門語言。  本書的主要內容就是介紹這門語言,在閱讀完本書後,相信你可以通過該語言來對計算機編程。  關於程序設計不憤不啓,不悱不發,舉一隅不以三隅反,則不復也。  —孔子除瞭講解JavaScript之外,本書也會介紹一些程序設計的基本原則。程序設計還是比較復雜的。編程的基本規則通常簡單清晰,但在這些基本規則之上構建的程序卻容易變得復雜,導緻程序産生瞭自己的規則和復雜性。即便程序是按照你自己的思路去構建的,你也有可能迷失在代碼之間。  在閱讀本書時,你有可能會覺得書中的概念難以理解。如果你剛剛開始學習編程,那麼你估計還有不少東西需要掌握呢。如果你想將所學知識融會貫通,那麼就需要去多參考和學習一些資料。  是否付齣必要的努力完全取決於你自己。當你閱讀本書的時候發現任何難點,韆萬不要輕易就對自己的能力下結論。隻要能堅持下去,你就是好樣的。稍做休息,復習一下所學的知識點,確保自己閱讀並理解瞭示例程序和相關的練習。學習是一項艱巨的任務,但你掌握的所有知識都屬於你自己,而且今後的學習道路會愈加輕鬆。  計算機程序員對其創造的宇宙負全部責任,因為他們是創造者。以計算機程序的形式,可創造齣無限復雜的宇宙。  —約瑟夫·魏澤鮑姆《計算機的威力與人類的理性》一個程序有很多含義:它是開發人員編寫的一段文本、計算機執行的一段指令集閤、計算機內存當中的數據以及控製內存中數據的操作集閤。我們通常很難將程序與我們日常生活中熟悉的事物進行對比。有一種錶麵上比較恰當的比喻,即將程序視作包含許多組件的機器,為瞭讓機器正常工作,這些組件通過內部通信來實現整個機器的正常運轉。  計算機正是運行這些非物質機器的載體。計算機本身並不能實現多麼復雜的功能,但計算機之所以有用是因為它們的運算速度非常快。而程序的作用就是將這些看似簡單的動作組閤起來,然後實現復雜的功能。  對於我們當中的某些人來說,編寫計算機程序是一種極大的樂趣。程序是開發人員思想的結晶。編寫程序不需要什麼物質投入,它很輕量級,通過我們的雙手創造。  但如果不稍加注意,程序的體積和復雜度就會失去控製,甚至代碼的編寫者也會感到迷惑。在可控的範圍內編寫程序是編程過程中首要解決的問題。當程序運行時,一切都是那麼美好。編程的精粹就在於如何更好地控製復雜度。質量高的程序的復雜度都不會太高。  很多開發人員認為,控製程序復雜度的好方法就是避免使用不熟悉的技術。他們製定瞭嚴格的規則(“佳實踐”),定義瞭程序應該編寫成什麼樣子。而激進分子更是覺得,如果程序沒有按照這些規則進行編寫,那麼編寫這些程序的開發人員就是不閤格的。  這極大地降低瞭程序的豐富程度!將程序簡化成一些直截瞭當的代碼,並完全禁止人們編寫豐富多樣的程序。正是因為程序當中有那麼多不同的思想和未經探索的領域,纔使得編程技術如此令人著迷。誠然,程序設計的世界中充滿各色陷阱,讓一個缺乏經驗的程序員陷入其中非常危險,但這也隻是意味著在前行過程中你需要小心謹慎,時刻保證頭腦清醒,畢竟我們還要麵對許多新挑戰,探索更多新的領域。而那些不願探索的人隻會停滯不前,淡忘編程的樂趣,厭倦自己的事業。  為什麼編程語言如此重要在計算技術發展伊始,並沒有編程語言這個概念。程序看起來就像這樣:  該程序計算數字1~10之和,並打印齣結果:1 + 2 + … + 10 = 55。該程序可以運行在一個簡單的機器上。在早期計算機上編程時,我們需要在正確的位置設置大量開關陣列,或在紙帶上穿孔並將紙帶輸入計算機中。你可以想象這個過程是多麼冗長乏味且易於齣錯。即便是編寫非常簡單的程序,也需要有經驗的人耗費很大精力纔能完成。編寫復雜的程序則更是難上加難。  當然瞭,手動輸入這些晦澀難懂的位序列(1和0)來編寫程序的確能讓程序員感到很有成就感,而且能給你的職業帶來極大的滿足感。  在上麵的程序中,每行都包含一條指令。我們可以用中文來描述這些指令:  1. 將數字0存儲在內存地址中第0的位置。  2. 將數字1存儲在內存地址中第1的位置。  3. 將內存地址中第1的位置的值存儲在內存地址中第2的位置。  4. 將內存地址中第2的位置的值減去數字11。  5. 如果內存地址第2的位置的值是0,則跳轉到指令9。  6. 將內存地址第1的位置的值加到內存地址第0的位置上。  7. 將內存地址第1的位置上的值加上數字1。  8. 跳轉到指令3。  9. 輸齣內存地址第0的位置上的值。  雖說這已經比一大堆位序列要好讀瞭許多,但仍然不盡如人意。或許使用名字代替數字作為指令和內存地址的標示符,可以進一步提高代碼的可讀性。  現在你能看齣該程序是如何工作的嗎?前兩行代碼初始化兩個內存位置的值:total用於保存纍加計算結果,而count則用於記錄當前數字。你可能覺得compare的那行代碼看起來有些奇怪。程序想根據count是否等於11來決定是否應該停止運行。因為我們的機器相當原始,所以隻能測試一個數字是否為0,並根據測試結果做齣判斷(是否跳轉)。因此程序用名為compare的內存位置存放count – 11的值,並根據該值是否為0決定是否跳轉。接下來兩行將count的值纍加到結果上,並將count加1,直到count等於11為止。  下麵使用JavaScript重新編寫瞭上麵的程序:  這個版本的程序得到瞭一些改進。更為重要的是,我們再也不需要指定程序如何來迴跳轉瞭,而是由while語句負責完成這個任務。隻要我們給予的條件成立,while語句就會不停地執行其下方的語句塊(包裹在大括號中)。而我們給予的條件是count <= 10,意思是“count小於等於10”。我們再也不需要創建臨時的值並將其與0比較,那樣的代碼十分煩瑣。編程語言的一項職責就是幫助我們處理這些煩瑣無趣的邏輯。  在程序的結尾,也就是while語句結束後,我們使用console.log操作來輸齣結果。  後,我們恰好有range和sum這類方便的操作。下麵代碼中的range函數用於創建數字集閤,sum函數用於計算數字集閤之和:  我們可以從這裏瞭解到,同一個程序可以用不同的方式進行編寫,代碼的長度可長可短,而可讀性可高可低。個版本的程序晦澀難懂,而後一個版本的程序則接近於人類語言的錶達方式:將1~10範圍內的數字之和記錄下來(我們會在後麵的章節中詳細介紹如何編寫sum和range這樣的函數)。  優秀的編程語言可以為開發人員提供更高層次的抽象,使用類似於人類語言的方式來與計算機進行交互。它還可以提供便捷的語句塊(比如while和console.log),以避免開發人員編寫煩瑣的代碼細節。它甚至可以讓你定義自己的語句塊(比如sum和range函數),並提供方便的方法來編寫這些語句塊。  什麼是JavaScriptJavaScript誕生於1995年。起初,Netscape Navigator瀏覽器將其運用在網頁上添加程序。自此以後,各類主流圖形網頁瀏覽器均采用瞭JavaScript。JavaScript使得現代網頁應用程序成為可能—使用JavaScript可以直接與用戶交互,從而避免每一個動作都需要重新載入頁麵。但有許多傳統網站也會使用JavaScript來提供實時交互以及更加智能的錶單功能。  JavaScript其實和名為Java的程序設計語言沒有任何關係。起瞭這麼一個相似的名字完全是市場考慮使然,這並非是一個明智的決定。當JavaScript齣現時,Java語言已在市場上得到大力推廣且擁有瞭極高人氣,因此某些人覺得依附於Java的成功是個不錯的主意。而我們現在已經無法擺脫這個名字瞭。  在JavaScript被廣泛采用之後,為瞭確保所有聲稱支持JavaScript的軟件都使用同一種語言,ECMA國際製訂瞭一份標準文檔來描述JavaScript的工作行為,標準化完成後,該標準被稱為ECMAScript標準。實際上,術語ECMAScript和 JavaScript可以交換使用。它們不過是同一種語言的兩個名字而已。  許多人會說JavaScript這樣那樣的不好。這其中有很多這樣的言論都是正確的。當被要求次使用JavaScript編寫代碼時,我當時就覺得這門語言難以駕馭。JavaScript接受我輸入的任何代碼,但是又使用和我的想法完全不同的方式來解釋代碼。由於我沒有任何綫索知道我之前做瞭什麼,因此我需要做齣更多工作,但這也就存在一個實際問題:我們可以自由使用JavaScript,而這種自由卻幾乎沒有限度。這種設計其實是希望初學者更容易使用JavaScript編寫程序。但實際上,係統不會指齣我們錯在何處,因此從程序中找齣問題變得更加棘手。  但這種自由性也有其優勢,許多技術在更為嚴格的語言中不可能實現,而在JavaScript中則留下瞭實現的餘地,正如你看到的那樣(比如第10章),有些優勢可以彌補JavaScript的一些缺點。在正確地學習JavaScript並使用它工作瞭一段時間後,我真正喜歡上瞭JavaScript。  JavaScript版本眾多。大約在2000~2010年間,這正是JavaScript飛速發展的時期,瀏覽器支持多的是ECMAScript 3。在此期間,ECMA著手製定ECMAScript 4,這是一個雄心勃勃的版本,ECMA計劃在這個版本中加入許多徹底的改進與擴展。但由於ECMAScript 3被廣泛使用,這種過於激進的修改必然會遭遇重重阻礙,後ECMA不得不於2008年放棄瞭版本4的製定,因此ECMA於2009年發布瞭改進較少的ECMAScript 5。目前所有主流瀏覽器均支持ECMAScript 5,因此本書著重介紹該版本。版本6的製定工作即也將完成,而且一些瀏覽器已經開始支持該版本的一些新特性瞭。  Web瀏覽器並不是唯一一個可以運行JavaScript的平颱。有些數據庫,比如MongoDB和CouchDB,也使用JavaScript作為腳本語言和查詢語言。一些桌麵和服務器開發的平颱,特彆是Node.js項目(第20章介紹),也在瀏覽器之外提供瞭強大的JavaScript開發環境。  代碼及相關工作代碼是程序的文本內容。本書多數章節都介紹瞭大量代碼。根據個人經驗,閱讀與編寫代碼是學習程序設計過程中必不可少的一部分,因此萬萬不可走馬觀花般地閱讀代碼,而應該認真閱讀並理解每個示例。剛開始使用這種方式可能會速度較慢並為代碼所睏惑,但我堅信你很快就可以熟能生巧。對待習題的方法也應該一樣。除非你確實已經編寫代碼解決瞭問題,否則不要假設你已經理解瞭問題。  建議讀者應嘗試在實際的JavaScript解釋器中執行習題代碼。這樣一來,你就可以馬上獲知代碼工作情況的反饋,而且我希望讀者去做更多的試驗,而不僅僅局限於習題的要求。  可以在http://eloquentjavascript.net/中查閱本書的在綫版本,並運行和實驗本書中的代碼。也可以在在綫版本中點擊任何代碼示例來編輯、運行並查看其産生的輸齣。在做習題時,你可以訪問http://eloquentjavascript.net/code/,該網址會提供每個習題的初始代碼,讓你專心於解答習題。  如果想要在本書提供的沙箱以外執行本書代碼,需要稍加注意。許多的示例是獨立的,而且可以在任何JavaScript環境下運行。但後續章節的代碼大多數都是為特定環境(瀏覽器或者Node.js)編寫的,而且隻能在這些特定環境下執行代碼。此外,許多章節定義瞭更大的程序,這些章節中齣現的代碼片段會互相依賴或是依賴於一些外部文件。本書網站的沙箱提供瞭zip壓縮文件的鏈接,該文件包含瞭所有運行特定章節代碼所需的腳本和數據文件。  章節介紹本書包括三個部分。前11章討論JavaScript語言本身的一些特性。接下來的8章討論網頁瀏覽器和JavaScript在網頁編程中的實踐。後兩章專門講解另一個使用JavaScript編程的環境—Node.js。  縱觀本書,共有5個項目實戰章,用於講解規模較大的示例程序,你可以通過這些章來仔細品味真實的編程過程。根據項目齣現次序,我們會陸續構建人工生命模擬項目、程序設計語言項目、平颱遊戲項目、繪圖程序和一個動態網站項目。  本書介紹編程語言時,首先使用4章來介紹JavaScript語言的基本結構,包括控製結構(比如在本前言中看到的while單詞)、函數(編寫你自己的操作)和數據結構。此後你就可以編寫簡單的程序瞭。接下來,第5章和第6章介紹函數和對象的運用技術,以編寫更加抽象的代碼並以此來控製復雜度。  介紹完個項目實戰之後,將會繼續講解處理錯誤與修復的方法、正則錶達式(處理文本數據的重要工具)與模塊化(解決復雜度的問題)。第二個項目實戰章則是對本書部分的總結。  第二部分(第12章~第19章),闡述瞭瀏覽器JavaScript中的一些工具。你將會學到在屏幕上顯示某些元素的方法(第13章與第16章),響應用戶輸入的方法(第14章與18章)和通過網絡通信的方法(第17章)。該部分又有兩個項目實戰章。  此後,第20章闡述Node.js,而第21章使用該工具構建一個簡單的網頁係統。  後,第22章講解一些在優化JavaScript程序運行速度時需要注意的事項。  本書版式約定本書中存在大量代碼,程序(包括你迄今為止看到的一些示例)代碼的字體如下所示:  為瞭展示程序産生的輸齣,本書常在代碼後編寫代碼期望輸齣,輸齣結果前會加上兩個反斜杠和一個箭頭。  後,祝各位好運!



現代Web開發的基石:構建動態、交互式應用的JavaScript實踐指南 在快速演進的數字世界中,JavaScript已然成為構建現代Web應用的絕對核心。從簡單的頁麵交互到復雜的單頁應用(SPA),再到服務器端開發和移動應用,JavaScript強大的功能和靈活的應用場景,使其成為任何渴望在Web開發領域有所建樹的開發者不可或缺的技能。本書旨在為你提供一個全麵、深入且實用的JavaScript學習路徑,幫助你從入門到精通,掌握這門語言的精髓,並能自信地運用它解決實際開發中的各類挑戰。 為何選擇JavaScript? JavaScript之所以如此重要,在於它提供瞭構建動態和交互式用戶體驗的能力。在過去,網頁主要以靜態內容為主,而JavaScript的齣現,徹底改變瞭這一局麵。它允許開發者在客戶端(用戶的瀏覽器)執行代碼,從而實現: 動態內容更新: 無需刷新整個頁麵,即可實時更新文本、圖片、列錶等內容,為用戶提供流暢的交互體驗,例如社交媒體信息流的自動加載、在綫購物車的實時更新。 響應式用戶界麵: 根據用戶操作、屏幕尺寸或設備類型,動態調整界麵布局和行為,確保應用在各種設備上都能提供最佳的用戶體驗。 復雜的交互邏輯: 實現拖放操作、錶單驗證、動畫效果、遊戲化功能等,讓Web應用不再僅僅是信息的展示平颱,更是功能豐富的服務。 異步通信: 通過AJAX(Asynchronous JavaScript and XML)等技術,瀏覽器可以與服務器進行異步通信,在後颱獲取數據並更新頁麵,而無需中斷用戶的當前操作,大大提升瞭應用的響應速度和用戶滿意度。 此外,JavaScript的生態係統極為龐大且活躍。大量的開源庫和框架,如React, Angular, Vue.js(前端)和Node.js(後端),極大地加速瞭開發過程,並提供瞭成熟的解決方案來處理復雜的前端和後端需求。掌握JavaScript,就意味著你擁有瞭進入這個廣闊生態係統並從中受益的通行證。 本書的定位與價值 本書並非一份枯燥的語言語法手冊,而是一本側重於“如何使用JavaScript解決實際問題”的實戰指南。我們深入剖析JavaScript的核心概念,並將其與現代Web開發中的實際場景相結閤,為你構建清晰、可維護且高性能的JavaScript應用奠定堅實的基礎。 本書的價值體現在以下幾個方麵: 1. 係統性的知識體係構建: 我們將JavaScript的知識點按照邏輯順序進行組織,從最基礎的數據類型、變量、運算符,到復雜的異步編程、模塊化、麵嚮對象編程,再到麵嚮未來的ES6+新特性,確保你能夠循序漸進地掌握每個概念。 2. 理論與實踐相結閤: 每一章節都配有大量的代碼示例、小練習和實際應用場景的講解。我們不僅告訴你“是什麼”,更側重於“為什麼”和“怎麼做”,幫助你理解每個概念背後的原理,並將其轉化為解決問題的能力。 3. 深入理解核心概念: 許多JavaScript的強大之處隱藏在其核心概念中,例如作用域、閉包、原型鏈、事件循環等。本書將對這些概念進行深入細緻的講解,幫助你建立起對JavaScript運行時機製的深刻理解,從而寫齣更健壯、更易於調試的代碼。 4. 掌握現代JavaScript特性: 隨著ECMAScript標準的不斷更新,JavaScript語言本身也在飛速發展。本書將重點介紹ES6及以後版本引入的強大新特性,如箭頭函數、類、解構賦值、Promise、async/await等,讓你能夠利用最新的語言特性編寫齣更簡潔、更高效的代碼。 5. 關注性能與最佳實踐: 除瞭語法和特性,本書還將探討JavaScript的性能優化技巧,以及代碼組織、錯誤處理、調試等方麵的最佳實踐。這些內容對於構建大型、可維護的應用程序至關重要。 6. 為進階打下基礎: 本書的內容涵蓋瞭JavaScript語言本身的核心,這為你進一步學習前端框架(如React, Vue, Angular)、後端Node.js、移動開發(如React Native)等打下瞭堅實的基礎。理解JavaScript的底層工作原理,將使你在學習這些高級技術時事半功倍。 本書的學習路徑與內容概覽 本書的學習內容將圍繞以下幾個核心領域展開,力求為你呈現一個完整、深入的JavaScript學習旅程: 第一部分:JavaScript基礎與核心概念 環境搭建與初體驗: 瞭解如何在瀏覽器和Node.js環境中運行JavaScript,並編寫你的第一個JavaScript程序。 數據類型與變量: 掌握JavaScript的各種基本數據類型(字符串、數字、布爾值、null、undefined、Symbol、BigInt)以及引用類型(對象、數組)。理解變量聲明(var, let, const)的區彆及其作用域。 運算符與錶達式: 學習算術運算符、比較運算符、邏輯運算符、賦值運算符等,以及如何構建和求值錶達式。 控製流: 掌握條件語句(if, else if, else, switch)和循環語句(for, while, do-while, for...in, for...of)的應用,控製程序的執行流程。 函數: 深入理解函數的定義、調用、參數傳遞(值傳遞與引用傳遞),以及函數錶達式、箭頭函數等現代函數寫法。 作用域與閉包: 這是JavaScript中最具挑戰性也最強大的概念之一。我們將詳細解釋詞法作用域、函數作用域、塊級作用域,以及閉包是如何産生的,以及它們在實際開發中的應用(例如數據封裝、函數柯裏化)。 對象與數組: 學習對象的創建、屬性訪問、方法調用,以及數組的常用操作(增刪改查、遍曆、高階函數如map, filter, reduce)。 原型與原型鏈: 理解JavaScript的繼承機製,深入剖析原型對象和原型鏈的工作原理,這是理解JavaScript麵嚮對象特性的關鍵。 第二部分:JavaScript進階與現代特性 ES6+新特性: 變量聲明: 深入理解 `let` 和 `const` 的塊級作用域,以及它們如何解決 `var` 帶來的問題。 箭頭函數: 學習箭頭函數簡潔的語法,以及它在 `this` 綁定上的獨特行為。 模闆字符串: 使用更靈活的方式構建字符串,支持嵌入錶達式和多行字符串。 解構賦值: 輕鬆地從數組或對象中提取數據,使代碼更具可讀性。 類(Class): 以更麵嚮對象的方式組織代碼,盡管JavaScript的類是基於原型的語法糖。 模塊化(Modules): 學習使用ES6模塊(import/export)來組織和管理代碼,提高代碼的可維護性和復用性。 Promise: 掌握處理異步操作的強大工具,解決迴調地獄問題。 async/await: 基於Promise的語法糖,使異步代碼看起來像同步代碼一樣簡潔易懂。 Set與Map: 學習新的數據結構,它們在某些場景下比普通對象和數組更高效。 展開運算符(...)與剩餘參數: 方便地處理數組和函數參數。 異步編程: 除瞭Promise和async/await,還將探討事件循環(Event Loop)、迴調函數、`setTimeout`, `setInterval` 等異步操作的底層機製。 錯誤處理: 學習如何使用 `try...catch...finally` 結構來捕獲和處理錯誤,以及自定義錯誤。 瀏覽器環境的JavaScript(BOM與DOM): 瞭解瀏覽器對象模型(BOM)和文檔對象模型(DOM),學習如何通過JavaScript操作網頁內容、響應用戶事件、實現動態效果。 Ajax與Fetch API: 學習如何使用JavaScript與服務器進行數據交互,構建動態加載內容的Web應用。 第三部分:JavaScript工程化與實踐 代碼風格與規範: 介紹常見的JavaScript代碼風格指南(如Airbnb, StandardJS),以及代碼格式化工具(如Prettier)。 調試技巧: 學習使用瀏覽器的開發者工具(Chrome DevTools, Firefox Developer Tools)進行斷點調試、查看變量、分析性能。 測試基礎: 簡要介紹單元測試、集成測試的概念,以及常用的JavaScript測試框架(如Jest)。 構建工具(概述): 簡要介紹Webpack, Vite等構建工具的作用,它們如何幫助我們打包、轉譯、優化JavaScript代碼。 麵嚮未來的JavaScript: 展望JavaScript的未來發展趨勢,以及一些新興的技術概念。 誰適閤閱讀本書? 初學者: 想要係統學習JavaScript,並將其作為進入Web開發領域的敲門磚的開發者。 有一定基礎的開發者: 想要鞏固JavaScript基礎知識,深入理解核心概念,並學習現代JavaScript特性的開發者。 前端開發者: 無論你使用的是React, Vue, Angular還是其他框架,紮實的JavaScript基礎都是不可或缺的。 後端開發者(Node.js): 想要深入理解JavaScript這門語言,以便更好地進行Node.js開發。 希望提升代碼質量和解決問題能力的開發者: 通過深入理解JavaScript的運行機製和最佳實踐,編寫齣更健壯、更高效的代碼。 結語 JavaScript的力量在於其靈活性和廣泛的應用範圍。本書將引領你踏上一段富有挑戰但收獲豐厚的學習之旅,幫助你掌握這門強大的語言,並自信地構建齣令人印象深刻的Web應用。無論你的目標是成為一名全棧工程師,還是一名專注於前端或後端的專傢,紮實的JavaScript功底都將是你職業生涯中最寶貴的財富。讓我們一起開始這段精彩的JavaScript探索之旅吧!

用戶評價

評分

這本書給我的感覺是,它不僅僅是一本技術書籍,更像是一位經驗豐富的導師,在我迷茫的時候指引方嚮,在我睏惑的時候耐心解答。《JavaScript編程精解(原書第2版)》在講解一些比較抽象的概念時,比如“this”的指嚮問題、原型繼承的實現原理,都做得非常齣色。它沒有迴避復雜性,而是把復雜的概念拆解成易於理解的組成部分,並輔以大量的圖示和代碼示例,讓我能夠可視化地理解這些抽象的概念。我發現,很多我在實際項目中遇到的棘手問題,在這本書裏都能找到根源和解決思路。這讓我對JavaScript這門語言有瞭更深厚的敬畏之情,也更有信心去挑戰更復雜的開發任務。

評分

坦白說,對於JavaScript,我一直都有點“又愛又恨”。它靈活得讓人著迷,但也因為這份靈活,常常在不經意間踩到“坑”。《JavaScript編程精解(原書第2版)》就像是一本“JavaScript避坑指南”加上“進階秘籍”。它不會告訴你怎麼寫某個框架,而是讓你理解JavaScript本身的核心魅力和運行機製。我非常欣賞作者的寫作風格,語言精準,邏輯清晰,而且非常注重理論與實踐的結閤。書中對事件模型、異步編程模式的深入剖析,讓我終於擺脫瞭對迴調地獄的恐懼,並且能夠更有效地利用Promise和Async/Await等新特性。這本書真的讓我對JavaScript的理解上升瞭一個新的颱階,感覺自己終於不再是那個隻會在錶麵做些小修小補的初學者瞭。

評分

這本《JavaScript編程精解(原書第2版)》簡直是我近期編程生涯中的一劑強心針!說實話,在接觸這本書之前,我對JavaScript的理解還停留在比較基礎的層麵,雖然能寫一些簡單的網頁交互,但總感覺自己像個在代碼海洋裏漂浮的小舢闆,對那些更深層次的原理和強大的特性感到陌生和畏懼。翻開這本書,我第一眼就被其嚴謹的邏輯和清晰的脈絡所吸引。作者似乎很有耐心,從最核心的概念講起,比如“作用域”、“閉包”、“原型鏈”這些我一直覺得似懂非懂的知識點,在書中被層層剝開,用非常直觀的比喻和生動的代碼示例,讓我茅塞頓開。不再是死記硬背那些拗口的定義,而是真正理解瞭它們為何如此,以及在實際開發中扮演著怎樣的角色。

評分

作為一名已經工作瞭幾年的前端開發者,我一直在尋找一本能夠真正提升我JavaScript內功的寶典,而《JavaScript編程精解(原書第2版)》無疑滿足瞭我的這個願望。它不像某些教程那樣浮於錶麵,隻講解API的使用,而是深入探討瞭JavaScript引擎的運作機製、內存管理、事件循環等等,這些內容對於理解JavaScript的性能優化、異步編程以及解決一些疑難雜癥至關重要。書中的很多例子都非常有啓發性,能夠引導我思考“為什麼會這樣?”、“有沒有更好的實現方式?”。特彆是關於ES6+新特性的介紹,不僅僅是羅列新語法,更強調瞭它們如何解決之前JavaScript存在的痛點,如何讓代碼更簡潔、更具可讀性,這對我日常的開發效率提升太大瞭。

評分

最近我開始重新審視自己的JavaScript學習路徑,總覺得之前的學習有些零散,沒有形成體係。《JavaScript編程精解(原書第2版)》的齣現,就像給我搭建瞭一個堅實的知識框架。它不是那種“快速入門”的書籍,而是需要靜下心來,一點一點地去消化吸收。我特彆喜歡書中對一些“坑”的講解,比如JavaScript中那些容易讓人産生誤解的行為,作者都給齣瞭詳細的解釋和解決方案,這讓我少走瞭很多彎路。閱讀的過程中,我常常會停下來,在腦海裏模擬代碼的執行過程,或者動手敲寫書中的代碼片段,驗證自己的理解。這種主動學習的方式,讓知識真正內化,而不是停留在“讀過”的層麵。

評分

京東物流,是我一直選擇京東購物的理由

評分

剛買迴來 還沒看 先囤著

評分

Js還是值得好好研究研究,前端的基礎。

評分

很不錯的一本書啊,看瞭以後很喜歡。

評分

這書裏的例子真是太逗瞭&hellip;&hellip;

評分

很好,幫助很大,很實用。

評分

幫同學買的,他很滿意。

評分

不錯不錯,一次不錯的購物,京東體驗可以的

評分

超級棒的書,內容剛好都是想看到的

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有