# { 物件教學 Object } <div class="block"> **本篇會談到** - 物件宣告 - 物件寫法 - 新增、讀值、刪除 delete - 屬性可以被刪除,那變數可以嗎? </div> 陣列是有幾筆資料在裡面,物件是一個東西裡面<font color="red">有哪些詳細細部的資訊</font>,是複合資料型態。 ## ✐ 物件宣告 可以透過 Object Literal 或 Object Constructor 去宣告物件 ### ➤ Object Literal (物件實字) 利用大括號去定義物件,裡面插入屬性與值,值可以是 number, string, function 都可以,而兩個屬性中間可以利用逗號`,` 去隔開。 ```javascript= // 1. 物件用大括號包起 var object1 = { property: 'value', // 2. 屬性property(可自訂名稱),提供屬性值用冒號刮起。 // 3. 值value 可以是任何資料型態 // 4. 物件區隔用 逗號 , 分開 } ``` :::info 屬性定義一律要使用字串 ::: ### ➤ Object Constructor (物件建構式) 利用 `new 加上 Object()`,直接插入一個物件,所產生的結果是物件,但大多情況下還是會比較常用『物件實字』的方式新增物件,這樣比較容易閱讀。 ```javascript= var object1 = { property: 'value', } var object2 = new Object(object1); // 宣告一個 object2 ,新增物件 object1 到 object2 中 ``` 如果插入一個數,會得到 number ```javascript= var object2 = new Object(1); // Number{1} // 出現 number 的物件 ``` 如果插入一個字串,會得到 string ```javascript= var object2 = new Object('1'); // String{1} // 出現 string 的物件 ``` ## ✐ 物件寫法 ### ➤ <font color="green">新增</font> 屬性與值到物件內 新增物件的屬性也有兩種方法: #### ➷ (一) 使用 <font color="red">`.`</font> 點記法 **`物件名稱.屬性 = value`** ```javascript= let farm={ farmer: 'Tom', } farm.chicken = 15; console.log(farm); // Object:{farmer: 'Tom',chicken:15} console.log(farm.chicken); // 15 ``` #### ➷ (二) 使用 <font color="red">`[' ']`</font> 括弧記法 - 使用中括號的方式,不只可以使用『字串』去取值,也可以使用『變數』方式取值。 - 物件中有些屬性是數字 number ,這時候用點記法取值,無法取得,所以要改用中括號 - 可以插入**變數或特殊字元** ```javascript= var family = { name: '小明家', 1: '123' } // 1. 字串賦值 family['dog']='Tommy'; family['$'] = 311; console.log(family); // {name: "小明家", dog: "Tommy", $: 311} // 2. 字串取值 console.log(family['name']); // 小明家 // 2. 變數取值 let a = 'name'; consol.log(family[a]) // 小明家 console.log(family[1]) // 1 ``` ### ➤ 物件<font color="green">讀值</font> 物件讀取物件也有兩種方式: #### ➷ (一) 使用 <font color="red">`.`</font> 點記法 - 通常情況下會使用.取值 - 以**字串**的方式尋找該object的屬性 ```javascript= var family = { 'name': '小明家', }; console.log('1',family.name); // 1 小明家 ``` - **執行物件裡的方法**(點記法與括弧記法都可以!) ```javascript= var family = { name: ‘小明家’, deposit: 1000, members: { mom: ‘老媽’, ming: ‘小明’ }, callFamily: function() { console.log(‘聯絡小明家’); } }; family.callFamily(); // 聯絡小明家 ``` #### ➷ (二) 使用 <font color="red">`[' ']`</font> 括弧記法 - ```javascript= var family = { 'name': '小明家', }; console.log('2',family['name']); // 2 小明家 ``` :::success **屬性為各種數字或特殊字元**時,或要**讀取變數**的情況下皆會使用[]。 ::: - **允許以變數**的方式取到值 ```javascript= var family = { name: '小明家' }; var a = 'name'; console.log(family.a); // undefined // 利用 . 點記法方式取值,因為 family 沒有 a ,所以 undefined console.log(family[a]); // 小明家 // 利用 a = 'name' 代入中括號,得到 family['name'],可以取得值 ``` - **執行物件裡的方法**(點記法與括弧記法都可以!) ```javascript= var family = { name: '小明家', deposit: 1000, members: { mom: '老媽', ming: '小明' }, callFamily: function() { console.log('聯絡小明家'); } }; family['callFamily'](); // 聯絡小明家 ``` ### ➤ 物件<font color="green">刪除</font>物件屬性 #### ➷ 使用[`delete`](https://hackmd.io/@3Ll7zkxzTdm0GYvz8VoF6g/HyzWz9R0u/%2FChGlG0E0Qsy3rhnwtUN0Lg#%E2%9E%A4-%E4%B8%80%E5%85%83%E9%81%8B%E7%AE%97%E5%AD%90)操作符。 範例1: ```javascript= var family = { name: '小明家', deposit: 1000, members: { mom: '老媽', ming: '小明' }, $:300, } delete family.members.ming; delete family['$']; ``` [範例2](https://hackmd.io/@unayojanni/HyzWz9R0u/%2Fm5NKLfVcROu_iC7DCMDX0w#全域、污染) ## ✐ 屬性可以被刪除,那變數可以嗎? #### 變數不可以被刪除,屬性才可以 下方 JavaScript 中,a 宣吿後給予值, b 沒有宣告就給值,會發生? ```javascript= var a = 1; // a 賦予到 window 上 b = 2; // b 也會賦予到 window 上 // 可看成 window.b = 2; console.log(window); // 操作 delete 看看 delete a; // false 無法被刪除 delete b; // true console.log(window); // b 消失, a 還存在 // 現在,再看一下 a, b console.log(a); // 1 console.log(b); // b id not defined ``` a 與 b 同時出現在 window 下 ![](https://i.imgur.com/PgJJN6J.png =300x) ###### tags: `JS` {%hackmd @unayojanni/H1Qq0uKkK %}