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。
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
Conclusion
- ES6 的 rest parameter 明顯比 ES5 的
arguments
優異,建議全面使用 rest parameter 取代arguments