請啟用 Javascript 查看內容

物件字面值擴充功能

 ·  ☕ 1 分鐘

JavaScript筆記 目錄

ES6 為 {} 物件字面值新增了幾個方便擴充功能,以下只提幾個常用。

簡寫

1. 屬性值簡寫

舉一個簡單的範例來說明。

變數與屬性名相同,這種應用場景很常見:

1
2
3
4
5
6
7
8
function foo(a, b) {
  return { 
    a: a,
    b: b 
  };
}

console.log(foo(1, 2)); // {a: 1, b: 2}

但在 ES6 環境下,可以這樣寫:

1
2
3
4
5
function foo(a, b) {
  return { a, b };
}

console.log(foo(1, 2)); // {a: 1, b: 2}

當屬性名與值名稱相同時,可以省略後面的值。

或者是:

1
2
3
4
5
const foo = 'bar';

const baz = { foo };
// 等同於
const baz = { foo: foo };

2. 方法簡寫

定義方法時,都會有 function 宣告。

1
2
3
4
5
6
7
const obj = {
  foo: function(a) {
    console.log(a);
  },
};

obj.foo(1); // 1

在 ES6 環境下,可以省略這個 function 宣告:

1
2
3
4
5
6
7
const obj = {
  foo(a) {
    console.log(a);
  },
};

obj.foo(1); // 1

但使用簡寫的方式,函式為不具名,而且無法使用箭頭函式。

屬性名稱

在 ES6 新增了可計算的功能,可以利用 [] 包裹運算式,當作鍵名。

1
2
3
4
5
6
7
8
9
let prefix = 'foo';

let myObject = {
  [prefix + 'bar']: 'hello',
  [prefix + 'baz']: 'world'
};

myObject.foobar;      // hello
myObject['foobaz'];   // world

竹白
作者
竹白
前端筆記

文章目錄