商品描述
【簡介】 這不是一本給初學者的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中的重要概念,更進一步去理解它的原理以及特別之處,還有在實際開發上的應用。 【目錄】 ▌第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