# 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 存儲有關錯誤的信息。 …等等。