---
# System prepended metadata

title: JS 學習筆記(2) - 物件型別

---

# JS 學習筆記(2) - 物件型別

- [重新認識 JavaScript: Day 04 物件、陣列以及型別判斷](https://ithelp.ithome.com.tw/articles/10190962)
- [The JavaScript languageObjects: the basics - Objects](https://javascript.info/object)

在上篇我們只說了基本型別，沒說到物件型別，那這篇就來好好提一下。

## 物件型別

1. 一個物件可以是個零至多種屬性的集合，而屬性是鍵 (key) 與值 (value) 之間的關聯。
2. 一個屬性的「值」可以是某個基本型別，也可以是另一個物件，甚至可以是一個函數。
3. 物件可以是瀏覽器預先定義好的，當然也可以是由自己定義物件的屬性與內容。

### 什麼是物件

我們可以把一個物件想象成一個帶有簽名文件的櫃子。每筆資料都通過key存儲在其文件中。通過名稱查找文件或添加/刪除文件很容易。

![](https://i.imgur.com/O5fFpJf.png)


### 建立物件

可以使用 {…} 建立物件。屬性是 "key:value" 鍵值對，其中 key 是字符串（也稱為"屬性名稱"），value可以是任何內容。

物件屬性的名稱可以使用關鍵字或保留字，也可以是特殊符號，並沒有像變數名稱命名規範那樣的限制。

**宣告空物件**
```javascript=
let user = new Object(); // "object constructor" syntax
let user = {};  // "object literal" syntax
```

**定義屬性**
```javascript=
let user = {     // an object
  name: "John",  // by key "name" store value "John"
  age: 30        // by key "age" store value 30
};
```

**訪問屬性**

可以使用點表示法 或者 `[]` 訪問屬性值：
```javascript=
// get property values of the object:
alert( user.name ); // John
alert( user.age ); // 30
alert( user['age'] ); // 30
```

**屬性新增**
```javascript=
var obj = { };
obj.name = 'Object';
```

**刪除屬性**

使用 `delete` 關鍵字刪除
```javascript=
var obj = { };
obj.name = 'Object';
delete obj.name;
```

**屬性是否存在**

不存在會返回 `undefined`

```javascript=
let user = {};
alert( user.noSuchProperty === undefined ); // true means "no such property"
```

還有一個特殊的運算符`in`。

```javascript=
let user = { name: "John", age: 30 };

alert( "age" in user ); // true, user.age exists
alert( "blabla" in user ); // false, user.blabla doesn't exist
```

**for遍歷**

```javascript=
for (key in object) {
  // executes the body for each key among object properties
}
```

```javascript=
let user = {
  name: "John",
  age: 30,
  isAdmin: true
};

for (let key in user) {
  // keys
  alert( key );  // name, age, isAdmin
  // values for the keys
  alert( user[key] ); // John, 30, true
}
```

## 概括
物件是具有幾個特殊功能的關聯陣列。

它們存儲屬性（鍵值對），其中：
* 屬性鍵必須是字串或符號（通常是字串）。
* 值可以是任何型別。

要訪問屬性，我們可以使用：
* 點符號：`obj.property`
* 方括號表示法`obj["property"]`。方括號允許從變數中獲取value，例如 `obj[varWithKey]`

額外的操作：
* 刪除屬性：`delete obj.prop`。
* 要檢查是否與給定值的屬性存在：`"key" in obj`。
* 遍歷一個物件：`for (let key in obj)` 循環。

我們在本章中研究的內容稱為"普通物件"，或僅稱為Object

JavaScript 中還有許多其他型別的物件：

* Array 存儲有序的數據集合，
* Date 存儲有關日期和時間的信息，
* Error 存儲有關錯誤的信息。

…等等。