--- title: 物件 tags: 物件, obj, description: --- 物件 Object === ### 什麼是物件 物件可將變數資訊描述的**較詳細**。 例如:用物件**描述**一間房子。坪數、窗戶、門、電燈、馬桶、陽台.... <br> ### 物件的格式 ```javascript= Object = { 物件屬性1: 屬性值1, 物件屬性2: 屬性值2, 物件屬性3: 屬性值3, }; ``` - **實際用物件方式描述一間房子** 物件的**屬性值**除了常見的```string``` ```number```...,可以是==物件==,也可以是==陣列包物件==。 以例子來看,變數house裡的door,每個門所屬位置都不同,材質不同、數量也不同,要詳細描述就以==陣列包物件==的方式來呈現。 ```javascript= let house = { levelGround: 30, door: [ { area: 'bedroom', material: 'wood', num: 1, }, { area: 'bathroom', material: 'plastic', num: 1, }, ], }; ``` ### 如何==取==物件的值 以上面的例子來看,要取得```levelGround```屬性值該怎麼寫? ```物件名稱.要取值的物件屬性``` ```javascript=16 console.log(house.levelGround); //30 // 把levelGround的值取出,再賦予給變數houseLevelGround let houseLevelGround = house.levelGround; ``` 也可以把物件屬性值取出,在賦予給新的變數。==物件是傳址不傳值== <br> ### 如何==新增==物件屬性 新增了一個空物件```person```。 ```javascript= let person = {}; ``` 要新增name、age、sex、isWakeUp這幾個屬性,並賦予值。 ```物件名稱.要新增的物件屬性 = 賦予的屬性值``` ```javascript=2 person.name = 'john'; person.age = 20; person.sex = 'male'; person.isWakeUp = true; console.log(person); // {name: "john", age: 20, sex: "male", isWakeUp: true} ``` <br> ### 如何==修改==物件屬性值 ```物件名稱.要修改屬性值的屬性名稱 = 賦予新的屬性值``` ```javascript= let person = { name: "john", age: 20, sex: "male", isWakeUp: true, }; person.name = 'mary'; person.age = 18; person.sex = 'female'; person.isWakeUp = false; console.log(person); // {name: "mary", age: 18, sex: "female", isWakeUp: false} ``` <br> ### 如何==刪除==物件屬性 ```delete 物件名稱.物件屬性``` 接續上面的例子,把物件```person```屬性```age```**刪除**後,回去看物件```person```已經**沒有**```age```這個屬性。 ```javascript=13 delete person.age; console.log(person); // {name: "mary", sex: "female", isWakeUp: false} ``` <br> ### 另一種讀取屬性值的方式 ```物件名稱[]```,[]內以**字串形式放入物件屬性**。```物件名稱['物件屬性']``` ```javascript= let person = { name: "john", age: 20, sex: "male", isWakeUp: true, }; console.log(person['name']); // john ``` 或是把字串形式的物件屬性,**賦予其他變數**,再把變數放到中括號內。 ```javascript= let person = { name: "john", age: 20, sex: "male", isWakeUp: true, }; let text = 'name'; console.log(person[text]); // john ``` #### 為什麼要用這種方式讀取物件資料 在JSON格式資料,可能會出現```'001'```這種格式的屬性。 在**物件取值.的後面無法使用數字**,這時就要用==物件屬性字串取值==的方式 ```javascript= let person = { name: "john", age: 20, sex: "male", isWakeUp: true, '001': 'hello', }; console.log(person['001']); //hello ``` <br> ### 如何取得物件==資料長度== **`Object.kets()`**,可以將物件內的屬性(不含值)全部取出,依序放置在陣列內,並回傳。 ```javascript= const userInfo = { age: 20, name: '小明', sex: 'male', hobby: ['前端開發', '讀書', '跑步'], favoriteFood: '滷肉飯', isVegetarian: false, }; console.log(Object.keys(userInfo)); // ["age", "name", "sex", "hobby", "favoriteFood", "isVegetarian"] ``` 再使用**取陣列長度**的方式取`Object.keys(userInfo)`的資料長度,就能得知物件`userInfo`的資料長度。 ```javascript= console.log(Object.keys(userInfo).length); ```