_ 占位符
你問到了一個在現代 JavaScript 中非常常見且實用的語法習慣! 簡單的答案是: _ (底線) 在這裡是一個「佔位符」,用來告訴閱讀程式碼的人(以及程式碼檢查工具):「我在這裡需要一個參數,但我完全不會用到它,所以我就忽略它了。」 詳細解釋 讓我們來分解 Array.from({ length: 24 }, (_, i) => { ... }) 這段程式碼: Array.from(arrayLike, mapFn) : Array.from 是一個靜態方法,可以用來從一個「類陣列物件」(array-like object) 或「可迭代物件」(iterable object) 創建一個新的、真正的陣列。 它接受第二個可選參數 mapFn ,這是一個映射函式 (map function)。 Array.from 會對創建的新陣列中的 每一個元素 都執行一次這個函式,並用函式的回傳值來替換該元素。 { length: 24 } : 這是一個「類陣列物件」。它不是一個真正的陣列,但它有一個 length 屬性,所以 Array.from 知道要創建一個包含 24 個元素的陣列。 在這一刻,這個新創建的陣列是 [undefined, undefined, ..., undefined] (總共 24 個)。 (_, i) => ${String(i).padStart(2, '0')}:00`` : 這就是那個 mapFn 映射函式。 Array.from 在遍歷那個長度為 24 的新陣列時,會為每個位置呼叫這個函式。 這個映射函式會接收 兩個參數 : 第一個參數 :是陣列中 當前元素的值 。因為我們的陣列是 [undefined, undefined, ...] ,所以這個參數 永遠都是 undefined 。 第二個參數 :是陣列中 當前元素的索引 (index),從 0 到 23 。 這就是 _ 出場的地方: 我們在程式碼邏輯中, 只需要 用到第二個參數 i (索引),來產生 '00:00' , '01:00' , '02:00' ... 這樣的字串。 我們 完全不需要 用到第一個參數(那個永遠是 undefined 的值)。 為了讓程式碼更清晰,我們不使用像...