ECMAScript 5 的 Property Accessor 提供了 Bracket Notation 可使用 [] 存取 Property,這使得 Property 可以使用 Variable;而 ECMAScript 2015 更加碼提供 Computed Property Name,讓我們在建立 Object 時就能使用 []。
Version
macOS Mojave 10.14.6
VS Code 1.37.1
Quokka 1.0.240
ECMAScript 2015
Property Accessor
let book = {
title: 'FP in JavaScript',
price: 100,
showDescdription: function() {
return `${this.title} / ${this.price}`
}
}
book.title // ?
book['title'] // ?
person 為 object,有 property 也有 method。
第 9 行
book.title // ?
為傳統 OOP 使用 dot notation . 純取 property。
10 行
book['title'] // ?
ECMAScript 允許我們以 bracket notation [] 存取 property 與執行 method。
這樣有什麼用呢 ?
既然 [] 可為 string,就表示可以是 variable,這就開了一個很大的門。

Read Property by Variable
let book = {
title: 'FP in JavaScript',
price: 100,
showDescdription: function() {
return `${this.title} / ${this.price}`
}
}
let fn = prop => obj => obj[prop]
fn('title')(book) // ?
Property 名稱可改用 function 的 argument 傳入,如此就能以 variable 的方式取得 property。

Run Method by Variable
let book = {
title: 'FP in JavaScript',
price: 100,
showDescdription: function() {
return `${this.title} / ${this.price}`
}
}
let fn = prop => obj => obj[prop]()
fn('showDescdription')(book) // ?
Method 名稱可改用 function 的 argument 傳入,如此就能以 variable 的方式執行 function。

Computed Property Name
let create = k => v => ({[k]: v})
let obj = create('title')('FP in JavaScript')
obj.title // ?
ES5 的 [] 只能針對既有 object 去讀取 property,ES6 將這種特性繼續發揚光大,讓你在建立 object 時也能使用 []。

Conclusion
- Property accessor 的
[]是我很愛的 syntax,當 property 名稱能使用 variable 後,就能動態存取 property 與執行 method - Computed property name 則讓我們連建立 object 時也能使用
[],語法直覺可讀性又高