# Javascript object物件 與 Array陣列 ### 物件 (Object) 想像生活中的事物都是由物件所組成,像是一個包包是由許多元素組成,物件中可以存放陣列、數值、字串、布林值或是函數等等的資料類型。 在 Javascript 中,**物件是非常重要的概念**,每個物件都有他的 property (屬性)以及 method (方法),**物件是一個 `name/value` 的組合**,一個 name 只能有一個 value,但是一個 value 可能是很多的 name/value。 相較於之前提到的 JS 的六個純值,使用"傳值"的方式,而物件,是使用"傳址"的方式。 簡單來說就是給這個物件一個收納櫃的號碼牌,管理員再根據號碼去找到對應的收納櫃,打開收納櫃後,才會看見裡面真正的物品。 #### 宣告物件以及讀取物件中的值 1. 宣告物件的方式,需要有大括號與 `name(名稱) : value(值)` 2. 若想讀取物件變數中某個物件的值,可以使用以下幾種方式: - `object.key(名稱)` - `object["key(名稱)"]` 3. 讀取物件中的每一個 key 鍵值可以使用 `Object.keys(物件)`,會回傳一個包含所有 key 的陣列 4. 讀取物件中的每一個 value 值可以使用 `Object.values(物件)`,會回傳一個包含所有 value 的陣列 ``` // 宣告物件 - 方法ㄧ : 使用 new Object() const myBag = new Object() // 創建一個新物件 myBag.price = 390; // 定義 key, value myBag.size = "small"; console.log(myBag) // {price:390, size:"small"} console.log(Object.values(myBag)) // [390,"small"] // 宣告物件 - 方法二 const thisBag = { brand : "Prada"; price : 20000 ; size : "small"; color : ["white","black","yellow","green"]; soldOut : false; }; console.log(thisBag.price) // 這裡會顯示 20000 console.log(thisBag["brand"]) // 這裡會顯示 Prada console.log(Object.keys(thisBag)) // ["brand","price","size","color","soldOut"] ``` ### 陣列 (Array) 陣列是一個可以儲存一系列值的變數,利用方括號將值存於其中。陣列,他其實也是一種物件。**Arrays in JavaScript are just objects.** 陣列與物件一樣,都是"傳址"。 要知道陣列的長度可以使用 `.length` 來得知陣列中長度。 宣告陣列可以寫成 : ``` let thisArrayNum = [2,3,4,5,6,7]; let thisArrayString = ["字串","字串2","字串3"]; let newArray = new Array() ``` 在 JS 中,陣列永遠是從 0 開始,所以要讀取陣列中的數值,可以在變數後方加入方括號,並填入想要讀取的編號 : ``` let thisArray = [2,3,4,5,6]; console.log (thisArray[0]) //這裡會顯示出 2 ``` #### 許多陣列的方法 在使用陣列方法前要注意,有一些方法他是會改變原陣列的(Mutable Array Methods),有一些方法他是會回傳一個新的陣列(Immutable Array Methods),當使用了會改變原陣列的方法時,有可能會連帶地影響到其他跟他有關聯的物件或質,所以這部分要特別注意。 1. Mutable Array Methods 以下幾種方法,都會改變原有的陣列 `.push` : 在陣列的最後新增數值 `.unshift` : 在陣列的最前面新增數值 `.pop` : 刪除陣列的最後數值 `.shift` : 刪除陣列的第一個數值 `.splice`: 在陣列中增加或是刪除特定元素及數量 `.reverse`: 將一個陣列反轉 `.sort`: 將一個陣列進行排序 `.fill` :在陣列中增加任何數值 2. Immutable Array Methods `.map` : 遍歷陣列,在最後回傳一個新陣列 `.filter` : 遍歷陣列並進行篩選,最後回傳一個新陣列 `.silce` : 任意擷取出陣列的某一部份 `.concat` : 結合不同的陣列 `.flat` : 將多維的陣列進行攤平 `.flatMap` : 適用於遍歷二維陣列並將其攤平 `.reduce`: 遍歷陣列元素,並且依據初始值及陣列來做運算 3. 取得陣列中的索引 `.indexOf` : 傳送 value 來取得其索引 `.findIndexOf`: 遍歷陣列,並且依據條件找到索引,如果沒有該值,則會回傳 -1 4. 取得陣列中的元素 `.find`: 回傳第一個滿足條件的元素值,否則回傳 undefined。 5. 判斷陣列中的元素是否存在或是符合抹特定條件 `.inclueds` : 判斷陣列是否包含特定的元素,並以此來回傳 true 或 false。 `.some`: 判斷陣列中的部分元素是否都符合函式的條件,回傳 true 或 false。 `every`:判斷陣列中的所有元素是否都符合函式的條件,回傳 true 或 false。 6. 將陣列合併為字串 `.join`: 將陣列合併成為一個字串 7. 如果只是要遍歷陣列 `.forEach`: 遍歷陣列,並依據函式來執行(永遠都會回傳 undefined) 以上幾種陣列方法可以參考 [MDN ARRAY](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array) ###### tags: `frontend learning`