點燈坊

失くすものさえない今が強くなるチャンスよ

如何將 Argument 變成 Key ?

Sam Xiao's Avatar 2020-07-11

ECMAScript 的 Object 可當成 Key / Value 的 Container 使用,若想將 Function 的任意 Argument 變成 Key,這該如何實現呢 ?

Version

macOS Catalina 10.15.5
VS Code 1.46.1
Quokka 1.0.289
ECMAScript 2015

Arguments Array-like Object

let f = function() {
  return Array.from(arguments).join('-')
}

f(0) // ?
f(0, 1) // ?
f(0, 2, 3) // ?

若要使 argument 變成 Object 的 key,可使用 join('-') 將眾多 argument 整合成單一 String 成為 key。

Function expression 可使用 ES5 的 arguments 取得所有 argument,唯 arguments 只是 Array-like Object,並不是 Array,因此必須使用 Array.from()arguments 轉成 Array。

key000

Rest Parameter

let f = (...x) => x.join('-')

f(0) // ?
f(0, 1) // ?
f(0, 2, 3) // ?

若使用 ES6 的 arrow function,則有更簡單用法,可直接使用 ... 展開,由於 rest parameter 已經是 Array,而非 Array-like Object,可直接使用 join('-') 成為 key。

Arrow function 不支援 arguments Array-like Object

key001

Conclusion

  • ES6 的 rest parameter 明顯比 ES5 的 arguments 優異,建議全面使用 rest parameter 取代 arguments

Reference

MDN, Rest Parameters