JavaScript 值與執行
從固定程式的輸出追查值、參照和執行次序,再做有明確答案的修正練習。
const 鎖住名稱,不代表物件不能改
先改物件內容,再試把 const 名稱指向另一物件。
每次建立函式,都可以有自己的狀態
輪流呼叫兩個計數器,分清每次改的是哪個值。
console.log 有顯示,不等於函式有傳回值
把記錄動作和傳回值拆開看,找出 undefined 的來源。
字串和數字一樣寫法,也未必是同一個值
比對數字、文字和空值時,別只看畫面上的字。
短路運算不只算真假,也會影響有沒有執行
不只估真假,還要核對哪些函式根本沒跑。
複製了物件,內層為何仍一起變?
外層已複製,仍要找出共用的內層物件。
函式預設參數只補 undefined,並非所有空值
沒傳值、undefined、null 和空字串,要分開試。
清單篩選再轉格式,原資料可以保留
先篩可見項目,再改顯示格式,核對原資料有沒有被改。
分組名稱可任意寫,別撞上物件內建鍵
用 Map 計分組,toString 也只是普通名稱。
排序後保留原陣列,分數相同也有固定次序
先複製再按數字排序,分數相同時保留輸入先後。
事件內再次觸發同一事件,once 仍只跑一次
once 回呼內再觸發同類事件,核對會執行幾次。
同步程式先跑完,微任務才接住處理
Promise 已完成,回呼仍要等同步程式跑完。
finally 可做收尾,但別不小心蓋過錯誤
收尾照做,原本的非同步錯誤也要交到 catch。
多個 Promise 成敗不同,結果仍按原次序整理
逐項看成敗記錄,結果位置仍跟輸入次序。
Generator 未必立即跑,取值才繼續
只取兩個值,核對 Generator 實際做了多少工作。
同一 regex 再測一次,為何結果不同?
同一個全域 regex 重複測試,要把 lastIndex 一起看。
網址參數有重複值,亦要處理 & 和空格
參數可重複,& 和空格也要原樣往返。
陣列空位和 undefined,迭代時未必一樣
陣列長度以外,還要核對索引是否真的有項目。
CustomEvent 的 detail,原來仍是同一個物件
CustomEvent 發出後,detail 是否已成獨立副本?