JavaScript 重修就好
胡立(Huli) 著
- 出版商: 深智
- 出版日期: 2025-07-19
- 定價: $760
- 售價: 7.9 折 $600
- 語言: 繁體中文
- 頁數: 464
- ISBN: 6267757048
- ISBN-13: 9786267757048
-
相關分類:
JavaScript
尚未上市,歡迎預購
相關主題
商品描述
這不是一本給初學者的JavaScript教科書。相反地,它是寫給那些已經學過JavaScript卻依然感到卡關,對某些觀念依然模糊的開發者。
就像大學課程一樣,或許都是死背答案,考試時題目一變就被當掉了。這時該怎麼辦呢?重修就好。
那為什麼要再學一次呢?因為我相信許多人第一次都沒有真的把這些觀念學進去,只是為了應付面試而已,面試結束就忘了。這也合理,因為許多地方都是教你這些知識,卻沒告訴你要用在哪裡。
這本書共分成了五個章節,分別是:
1. 從重新認識JavaScript開始
2. 重要與不重要的資料型別
3. 物件與有趣的prototype
4. 從scope、closure以及this談底層運作
5. 理解非同步
每個章節都對應到了一些令初學者很頭痛的話題,而你至少可以找到底下疑問的解答:
1. 知道this是什麼要幹嘛?
2. 知道[]+{}的結果是重要的嗎?
3. Closure到底可以用在哪裡?
4. Prototype chain好複雜,為什麼又是prototype又是__proto__?
5. 理解Event loop中的microtask可以幹嘛?
6. Call by value、call by reference還是call by sharing,重要嗎?
7. 我怎麼知道自己學習的東西是不是對的?
8. 我學這些知識在實際開發中到底有什麼用?
本書不教你死背知識,而是給你一個合理的學習理由,並且藉由實際的案例來帶入這些知識,告訴你為什麼要學習,在開發時又會用在哪裡。
有些人會說「以後AI要取代軟體工程師了,還需要學這些嗎?」,如果你現在就打算轉行,那確實不需要了。但我相信AI無法完全取代,還是要有人負責debug跟確認AI寫的東西,並負起責任。當僧多粥少時,誰的硬實力比較強,就有越多的優勢,而這就是在AI時代下繼續學習的理由。
在《JavaScript重修就好》這本書中,會秉持著重修的精神,相同的語法、相同的知識,但是為讀者帶來嶄新的體驗,並且發現這些知識背後的關聯以及學習的美好之處。我們會逐個擊破那些JavaScript中的重要概念,更進一步去理解它的原理以及特別之處,還有在實際開發上的應用。
作者簡介
Huli,你不一定記得這個名字,但是在Google搜尋時很有可能點進去過我寫的文章。喜歡寫code,喜歡寫部落格,有些人的興趣是旅遊、露營、看電影,而寫部落格就是我的興趣。不為了什麼特殊目的而寫,單純只是寫了會快樂。
對JavaScript的語法比對英文文法還熟,會的JavaScript小技巧比背過的英文單字還多。閱讀ECMAScript規格書得到的快樂比看了幾本龍傲天轉生爽作來得更長久,喜歡獲得知識時的那個Aha! moment。
參加過一些研討會給出自己喜歡的講題,如CYBERSEC、MOPCON、JSDC以及Modern Web Conference等等,有時講資安,有時講前端。
Blog: https://blog.huli.tw
Facebook: https://www.facebook.com/huli.blog
目錄大綱
▌第0章 導讀
前言
為什麼想寫這本書
AI時代下,學習的理由是什麼
本書架構
關於作者
致謝
▌第1章 從重新認識JavaScript開始
1.1 JavaScript的誕生:它跟Java真的無關嗎?
1.2 JavaScript的包袱:想丟也丟不掉
SmooshGate事件
Don't break the Web:別把網站弄壞!
被淘汰的HTML標籤
1.3 JavaScript的真理:該如何區分知識的真偽?
初探ECMAScript
String.prototype.repeat的實作
知名的typeof bug
你所不知道的註解
來看看JavaScript引擎的實作
1.4 JavaScript的執行環境:為什麼這個不能用?
薛丁格的函式
什麼是runtime?
從不同runtime學習JavaScript
小結
▌第2章 重要與不重要的資料型別
2.1 JavaScript 到底有幾種資料型別?
2.2 Number 與BigInt
數字與字串的轉換
浮點數與IEEE 754
特別的NaN
數字的範圍
有趣的位元運算
2.3 編碼與字串
從傳紙條學習編碼
真實世界中的編碼
字串與UTF-16跟UCS-2
有趣的字串冷知識
2.4 函式與arguments
腦力激盪時間
有趣的function
自動綁定的變數
多種建立函式的方法
腦力激盪解答時間
2.5 型別轉換與魔法
轉成原始型別的Magic methods
從被講爛的==與===中找到新鮮事
更多的魔術方法
看不見的Boxing
小結
▌第3章 物件與有趣的 prototype
3.1 從物件導向理解prototype
探究原理
模擬尋找key的過程
constructor與new
3.2 獨特的攻擊手法:Prototype pollution
Prototype pollution是怎麼發生的?
script gadgets
防禦方式
3.3 管他call by value還是reference
求值策略(Evaluation strategy)的紛爭
名詞真的這麼重要嗎?
理解機制,而非名詞
3.4 有趣的defineProperty 與Proxy
更多的屬性以及Object.defineProperty
Vue2與Object.defineProperty
物件的代理:Proxy
Proxy的其他應用
3.5 淺層複製與深層複製
自己做一個深層複製
從lodash原始碼中學習
內建的深層複製structuredClone
小結
▌第4章 從scope、closure 與this談底層運作
4.1 JavaScript如何解析變數?談談scope
常見的scope問題
4.2 Hoisting 不是重點,理解底層機制才是
V8引擎的執行流程
V8的加速秘密武器:TurboFan
來看變數宣告的規格吧
4.3 Closure的實際運用
環境隔離的妙用
幫函式加上功能
被忽略的記憶體怪獸
4.4 This 是什麼,真的重要嗎?
從Java的this開始
走樣的this
刻意改變this
小結
▌第5章 理解非同步
5.1 逼不得已的非同步
阻塞與非阻塞
同步與非同步
瀏覽器上的同步與非同步
你以為陌生卻熟悉的callback
Callback function的參數
5.2 理解非同步的關鍵:Event loop
什麼是event loop?
從範例中學習event loop
解答時間
5.3 Promise與async/await
Promise的基本使用方式
讓非同步看起來像同步:async與await
該如何理解async/await的執行順序?
再多瞭解Promise一點
5.4 從Promise開始擴充event loop模型
Task與microtask
Event handler的同步與非同步
Event loop與畫面的更新
在React以及Vue中的應用
Event loop的規格
小結
▌結語
▌附錄
授權條款
ECMAScript® 2024 Language Specification
facebook/react
ungap/structured-clone
v8/v8
vercel/next.js
vuejs/corezloirock/core-js