JavaScript這門語言簡單易用,很容易上手,但其語言機(jī)制復(fù)雜微妙,即使是經(jīng)驗(yàn)豐富的JavaScript開發(fā)人員,如果沒有認(rèn)真學(xué)習(xí)的話也無法真正理解。本套書直面當(dāng)前JavaScript開發(fā)人員不求甚解的大趨勢,深入理解語言內(nèi)部的機(jī)制,介紹了JavaScript中常被人誤解和忽視的重要知識點(diǎn)。本書是其中卷,主要介紹了類型、語法、異步和性能。
JavaScript語言有很多復(fù)雜的概念,但卻用簡單的方式體現(xiàn)出來(比如回調(diào)函數(shù)),因此,JavaScript開發(fā)者無需理解語言內(nèi)部的原理,就能編寫出功能的程序。然而,JavaScript的這些復(fù)雜精妙的概念才是語言的精髓,即使是經(jīng)驗(yàn)豐富的JavaScript開發(fā)者,如果沒有認(rèn)真學(xué)習(xí),也無法真正理解語言本身的特性。正是因?yàn)榻^大多數(shù)人不求甚解,一遇到出乎意料的行為就認(rèn)為是語言本身有缺陷,進(jìn)而把相關(guān)的特性加入黑名單,久而久之就排除了這門語言的多樣性,人為地使它變得不完整、不安全。
“你不知道的JavaScript”系列就是要讓不求甚解的JavaScript開發(fā)者迎難而上,深入語言內(nèi)部,弄清楚JavaScript每一個零部件的用途。本書介紹了該系列的兩個主題:“類型和語法”以及“異步和性能”。掌握了這些知識之后,無論什么技術(shù)、框架和流行詞語,你都能輕松理解。
Kyle Simpson
作家、培訓(xùn)師、講師、開源社區(qū)的活躍成員,推崇開放的互聯(lián)網(wǎng),對JavaScript、HTML5、實(shí)時/端對端通信和Web性能有深入研究。
單業(yè) (譯者)
計算機(jī)專業(yè)碩士,軟件工程師,曾供職于多家軟件公司,從事軟件開發(fā)工作,現(xiàn)居于上海。負(fù)責(zé)本書第二部分“異步和性能”的翻譯。
姜南 (譯者)
從事過國內(nèi)外金融、通信、移動互聯(lián)網(wǎng)、數(shù)字出版等領(lǐng)域的IT系統(tǒng)開發(fā)工作,擅長的技術(shù)有Java、C#、HTML5、JavaScript、iOS、Android等。長期在獨(dú)立技術(shù)博客——酷殼(coolshell.cn)發(fā)表翻譯文章。負(fù)責(zé)本書首部分“類型和語法”的翻譯。
前言 XI
及時部分類型和語法
序2
第1章 類型3
1.1類型4
1.2內(nèi)置類型4
1.3值和類型6
1.3.1undefined 和undeclared6
1.3.2typeof Undeclared7
1.4小結(jié)10
第2章值11
2.1數(shù)組11
2.2字符串13
2.3數(shù)字15
2.3.1數(shù)字的語法16
2.3.2較小的數(shù)值18
2.3.3整數(shù)的安全范圍19
2.3.4整數(shù)檢測20
2.3.532 位有符號整數(shù)20
2.4特殊數(shù)值21
2.4.1不是值的值21
2.4.2undefined21
2.4.3特殊的數(shù)字23
2.4.4特殊等式27
2.5值和引用28
2.6小結(jié)31
第3章原生函數(shù)33
3.1內(nèi)部屬性[[Class]]34
3.2封裝對象包裝35
3.3拆封36
3.4原生函數(shù)作為構(gòu)造函數(shù)37
3.4.1Array(..)37
3.4.2Object(..)、Function(..) 和RegExp(..)40
3.4.3Date(..) 和Error(..)41
3.4.4Symbol(..)42
3.4.5原生原型43
3.5小結(jié)45
第4章強(qiáng)制類型轉(zhuǎn)換46
4.1值類型轉(zhuǎn)換46
4.2抽象值操作47
4.2.1ToString48
4.2.2ToNumber52
4.2.3ToBoolean53
4.3顯式強(qiáng)制類型轉(zhuǎn)換56
4.3.1字符串和數(shù)字之間的顯式轉(zhuǎn)換57
4.3.2顯式解析數(shù)字字符串62
4.3.3顯式轉(zhuǎn)換為布爾值65
4.4隱式強(qiáng)制類型轉(zhuǎn)換67
4.4.1隱式地簡化67
4.4.2字符串和數(shù)字之間的隱式強(qiáng)制類型轉(zhuǎn)換68
4.4.3布爾值到數(shù)字的隱式強(qiáng)制類型轉(zhuǎn)換71
4.4.4隱式強(qiáng)制類型轉(zhuǎn)換為布爾值72
4.4.5|| 和&&73
4.4.6符號的強(qiáng)制類型轉(zhuǎn)換76
4.5寬松相等和嚴(yán)格相等77
4.5.1相等比較操作的性能77
4.5.2抽象相等
4.6抽象關(guān)系比較89
4.7小結(jié)91
第5章語法92
5.1語句和表達(dá)式92
5.1.1語句的結(jié)果值93
5.1.2表達(dá)式的副作用95
5.1.3上下文規(guī)則99
5.2運(yùn)算符優(yōu)先級104
5.2.1短路107
5.2.2更強(qiáng)的綁定107
5.2.3關(guān)聯(lián)108
5.2.4釋疑110
5.3自動分號111
5.4錯誤113
5.5函數(shù)參數(shù)115
5.6try..finally117
5.7switch120
5.8小結(jié)122
附錄A混合環(huán)境JavaScript123
第二部分異步和性能
序136
第1章異步:現(xiàn)在與將來138
1.1分塊的程序139
1.2事件循環(huán)141
1.3并行線程143
1.4并發(fā)148
1.4.1非交互150
1.4.2交互150
1.4.3協(xié)作154
1.5任務(wù)156
1.6語句順序157
1.7小結(jié)159
第2章回調(diào)161
2.1continuation162
2.2順序的大腦163
2.2.1執(zhí)行與計劃164
2.2.2嵌套回調(diào)與鏈?zhǔn)交卣{(diào)165
2.3信任問題169
2.3.1五個回調(diào)的故事170
2.3.2不只是別人的代碼171
2.4省點(diǎn)回調(diào)173
2.5小結(jié)176
第3章Promise178
3.1什么是Promise179
3.1.1未來值179
3.1.2完成事件183
3.2具有then 方法的鴨子類型188
3.3Promise 信任問題190
3.3.1調(diào)用過早190
3.3.2調(diào)用過晚191
3.3.3回調(diào)未調(diào)用192
3.3.4調(diào)用次數(shù)過少或過多193
3.3.5未能傳遞參數(shù)/ 環(huán)境值193
3.3.6吞掉錯誤或異常194
3.3.7是可信任的Promise 嗎195
3.3.8建立信任197
3.4鏈?zhǔn)搅?98
3.5錯誤處理206
3.5.1絕望的陷阱208
3.5.2處理未捕獲的情況209
3.5.3成功的坑211
3.6Promise 模式212
3.6.1Promise.all([ .. ])212
3.6.2Promise.race([ .. ])213
3.6.3all([ .. ]) 和race([ .. ]) 的變體216
3.6.4并發(fā)迭代217
3.7Promise API 概述219
3.7.1new Promise(..) 構(gòu)造器219
3.7.2Promise.resolve(..) 和Promise.reject(..)219
3.7.3then(..) 和catch(..)220
3.7.4Promise.all([ .. ]) 和Promise.race([ .. ])221
3.8Promise 局限性222
3.8.1順序錯誤處理222
3.8.2單一值223
3.8.3單決議225
3.8.4慣性227
3.8.5無法取消的Promise230
3.8.6Promise 性能231
3.9小結(jié)233
第4章生成器234
4.1打破完整運(yùn)行234
4.1.1輸入和輸出236
4.1.2多個迭代器239
4.2生成器產(chǎn)生值243
4.2.1生產(chǎn)者與迭代器243
4.2.2iterable246
4.2.3生成器迭代器247
4.3異步迭代生成器250
4.4生成器 Promise254
4.4.1支持Promise 的Generator Runner256
4.4.2生成器中的Promise 并發(fā)258
4.5生成器委托262
4.5.1為什么用委托264
4.5.2消息委托264
4.5.3異步委托268
4.5.4遞歸委托268
4.6生成器并發(fā)269
4.7形實(shí)轉(zhuǎn)換程序273
4.8ES6 之前的生成器279
4.8.1手工變換280
4.8.2自動轉(zhuǎn)換284
4.9小結(jié)285
第5章程序性能287
5.1Web Worker288
5.1.1Worker 環(huán)境290
5.1.2數(shù)據(jù)傳遞291
5.1.3共享Worker291
5.1.4模擬Web Worker293
5.2SIMD293
5.3asm.js295
5.3.1如何使用asm.js 優(yōu)化295
5.3.2asm.js 模塊296
5.4小結(jié)298
第6章性能測試與調(diào)優(yōu)299
6.1性能測試99
6.1.1重復(fù)300
6.1.2Benchmark.js301
6.2環(huán)境為王303
6.3jsPerf.com305
6.4寫好測試309
6.5微性能309
6.5.1不是所有的引擎都類似312
6.5.2大局314
6.6尾調(diào)用優(yōu)化316
6.7小結(jié)318
附錄Aasynquence 庫319
附錄B高級異步模式339
“精妙解釋JavaScript的核心基礎(chǔ)知識,讓你收獲‘復(fù)制 粘貼’和JavaScript工具庫中沒有也絕不可能教給你的知識。”
——David Walsh,Mozilla博學(xué)開發(fā)人員
“Kyle關(guān)注JavaScript的異步特性,并為你展示如何通過Promise和生成器理清這一特性。”
——Marc Grabanski,F(xiàn)rontend Masters首席執(zhí)行官兼UI開發(fā)工程師
“Promise和Chrome都已經(jīng)成為提高代碼可讀性和可維護(hù)性的重要工具,本書涵蓋的內(nèi)容會讓你對并發(fā)和異步有越來越多的控制。”
——Jake Archibald,Google Chrome開發(fā)大使
這書上冊我看過,寫的很好
很不錯的書
學(xué)JavaScript拿來印證輔助學(xué)習(xí),很不錯!
ok ok
非常好,提升自己。
不錯的輔助書籍,有助于學(xué)習(xí)
挺好的 看完高三后在看
和上卷一樣的效果,棒
還不錯 滿意 第一次買
大神們推薦的,值得一看,期待下卷。
有點(diǎn)慢,書有點(diǎn)折
還沒看,先來評價
內(nèi)容還不錯,有點(diǎn)看不太懂,目前還在學(xué)習(xí)中
昨天下午下單,今天就到了,速度很快。快遞小哥態(tài)度不錯,書的質(zhì)量不錯。當(dāng)當(dāng)真給力.
包裝很好。
書還沒看,應(yīng)該還不錯,書還沒看,應(yīng)該還不錯
買給自己的學(xué)生看的,正好教這個學(xué)科,幫助很大
一次下了兩冊,這本還沒看…還沒看…
技術(shù)人員必備工具書
不錯,幫助很大
周年慶屯一波,實(shí)惠超值
剛收到圖書的時候,訂單中是有申請發(fā)票的,但是包裹里面沒有發(fā)票!于是第一次聯(lián)系客服申請,客服幫我申請后,我給了具體的收貨地址和手機(jī)號碼,然后客服跟我說48小時內(nèi)審核通過就會寄出并給我發(fā)送發(fā)貨通知。結(jié)果隔了2天,沒有發(fā)貨通知,于是第二次聯(lián)系客服,客服和我說已經(jīng)在處理了的,需要審核時間,于是我很耐心地等待。等了兩天,依舊沒有結(jié)果,我第三次聯(lián)系客服,客服又說48小時,我說如果我48小時內(nèi)再沒有收到任何通知,我就要投訴了。結(jié)果客服轉(zhuǎn)到了人工服務(wù)那邊,第二天客服打電話給我,說已經(jīng)把發(fā)票遞送出去了的,并且沒有簽收成功,我問了一下手機(jī)號碼是否是我的,結(jié)果她查看后才發(fā)現(xiàn)手機(jī)號寫成了訂單號。這種低級錯誤怎么可以出現(xiàn)?如果我需要這張發(fā)票去報銷,而報銷時間截止了,那么這個責(zé)任應(yīng)該由誰來承擔(dān)?并且?guī)状温?lián)系客服后,都說在審核,是否有認(rèn)真查看信息?訂單號以34開頭,相信大家都知道絕對不是手機(jī)號碼!而當(dāng)當(dāng)對于這件事并沒有很誠摯地跟我道歉和做出相應(yīng)的賠償!
花了一周時間把上卷看完,正在看中卷。非常不錯
印刷不如上冊清晰,翻譯不如上冊風(fēng)趣。但內(nèi)容非常好,技術(shù)書,要求不高,值得購買!
這個系列的書很好,適合有點(diǎn)JS基礎(chǔ)的人閱讀,等下卷出了,就把這套補(bǔ)齊。
質(zhì)量很好,內(nèi)容也很好,這個系列的就剩下冊沒出了,出了馬上買