Day.17 「如果基本型別是商品,那物件型別就是購物袋」 —— JavaScript 物件型別
Day.17 「如果基本型別是商品,那物件型別就是購物袋」 —— JavaScript 物件型別
前面有介紹了基本型別,基本型別有 string
、number
、boolean
、null
、undefined
這五個型別,剩下的可以都歸類於物件型別。
什麼是物件型別?
如同標題所說,基本型別所存入的值比較單純簡單,每個值都沒有關連,如同一個商店賣的商品一樣。
1 |
|
而現在要來介紹的物件型別,就是由 0 個到多個的資料屬性所組合而成的,讓資料有關連性!就像我要購買咖啡與三明治一樣,讓這兩個商品裝進我的購物袋。
1 |
|
當然這只是簡單的比喻,實際並沒那麼簡單。
物件(object)
先來介紹最基礎的物件(object)
物件可以多個屬性值組合而成,屬於無序集合體,每個屬性都會有一個對應值,特色是由{}
包起來。
就像一個人有名字(string)、性別(string)、年齡(number),就很適合用物件來新增。
宣告物件的方法
利用 new Object() 新增物件
這是以前新增物件的方法,利用 new Object()
幫變數新增 {}
空物件,再由賦值語句 物件名.屬性名 = 屬性值
,進行新增物件屬性。
1 |
|
利用空物件 {} 新增物件
這是現在大多數人都使用的方法,更簡單直觀,直接宣告物件並在裡面定義屬性 { key: value, key2: value }
。
物件結構:
- 使用
{}
包住 - key 命名,盡量具有語意,盡量避免使用 數字、數字英文混和 與 空白鍵,如果 數字開頭與英文混和 或 含有空白鍵,需使用引號
''
包起來,而單純數字就不需要引號包起來。 - value 值可以是任何型別,只要遵守型別規則就可以了。
- 多個屬性值用
,
做區隔。
1 |
|
當然也可以先宣告空物件
也可以透過宣告空物件,再看需要新增進去。
1 |
|
如何存取物件的 value 值
就跟前面新增屬性值的方法一樣
使用
.
取值,通常都使用這個方式取值,比較直觀1
2
3
4
5
6const person = {
name : "毛毛",
gender : "男"
}
console.log( person.name ); // "毛毛"使用
[""]
取值,通常使用在 key 的命名法不符合常規變數命名時(如:數字開頭 或 字串中間有空格),藉由自動轉型使用中括號框起字串取值,如果 key 命名是純數字,可以不使用引號取值。1
2
3
4
5
6
7
8
9
10
11
12
13const obj = {
1 : "我是 1",
"2a" : "我是 2a",
'my name': "毛毛"
}
console.log( obj.1 ); // 報錯
console.log( obj[1] ); // "我是 1"
console.log( obj["1"] ); // "我是 1"
console.log( obj[2a] ); // 報錯
console.log( obj["2a"] ); // "我是 2a"
console.log( obj[my name] ); // 報錯
console.log( obj["my name"] ); // "毛毛"
如何新增物件屬性
眼尖的人應該已經有發現,其實前面介紹如何新增物件時,就有新增物件屬性。
需注意 物件的 key
會自動轉型成字串型別,而 value
可以存任何型別。
而新增方法其實就跟存取方法幾乎一模一樣,使用賦值語句直接賦值即可!如:person.name = "毛毛";
注意的要點也差不多,盡量使用有語意的字串來命名 key。
如何刪除物件屬性
這就要使用到一元運算子 delete
,在要刪除的屬性前面使用 delete
就會刪除屬性。
1 |
|
陣列(array)
跟物件(object)有點相似,陣列也是多個值組合而成。
與物件不一樣的是,屬於有序集合體,陣列的屬性名為數字索引,陣列索引號碼由 0 開始。
雖然可以有很多不同的值組合,但通常都會放同類型、具有關聯性的值統合成陣列。
就像一個班級有你(string)、我(string)、他(string),都是班級裡的學生,就很適合用陣列。
宣告陣列的方法
其實跟宣告物件的方法差不多,你會覺得似曾相似。
就想像原本的所有屬性值,變成有序的索引值就好。
利用 new Array() 新增陣列
這是以前新增陣列的方法,利用 new Array()
幫變數新增 []
空物件,再由賦值語句 陣列名[ 索引號碼 ] = 屬性值
,進行新增陣列內容。
因為索引號碼一定是有序數字,所以只能使用 陣列名[ 索引號碼 ]
來新增存取。
1 |
|
利用空陣列 [] 新增物件
這是現在大多數人都使用的方法,更簡單直觀,直接宣告陣列並在裡面定義屬性 [ value, value ]
。
陣列結構:
- 使用
[]
包住 - value 值可以是任何型別,但通常使用陣列的 value 值會具有相關性。
- 多個 value 值用
,
做區隔。
1 |
|
當然也可以先宣告空陣列
也可以透過宣告空物件,再看需要新增進去。
1 |
|
如何 新增 與 刪除 陣列索引
這聰明的你應該馬上就猜到!沒錯~跟物件使用的方法非常像,因為索引值都是數字,所以直接用 []
來存取陣列索引值就可以了!
但是陣列還有更好的新增刪除方法。
如果是用索引直接新增,會產生一個問題。如下:
1 |
|
你會發現索引值打錯,會多很多個還沒定義的索引值先占位子!
每次新增刪除都還要小心翼翼地計算索引值。
在陣列最末端新增索引值 push()
這時候使用 push()
這個方法就能無後顧之憂的在陣列最後面新增索引值了!
1 |
|
刪除陣列最末端的索引值 pop()
有新增就會有刪除!使用 pop()
這個方法就能毫無顧忌地刪除陣列最後的索引值了!
1 |
|
刪除 與 新增 最前頭的索引值 shift() 與 unshift()
既然有處理陣列最末端的,當然也有處理陣列最前頭的索引值!
1 |
|
如何獲取陣列的長度 length
有時候陣列很長時,可以依靠 length
語法來獲取陣列的長度!
1 |
|
甚至修改陣列長度
利用 length
修改陣列,讓陣列直接刪除多餘的值 或 添加未定義的值!
1 |
|
除了用在陣列也能用在字串
length
除了可以用在察看陣列的長度,也能用來查看字串的字數,不過跟陣列不同的是不能修改字串的長度!
1 |
|
還有更多方法
還有很多陣列方法可以使用,有興趣的可以再去看 JavaScript Array 陣列操作方法
如何透過程式碼判斷 陣列 和 物件
前面我們有教過一元運算子的 typeof
可以用來判斷型別,但會發現判斷陣列與物件時,回傳的都是 "object"
!
這時候 JavaScript 有新增一個判斷陣列的方法 Array.isArray()
。
1 |
|
總結
這邊先大概瞭解了物件型別的基礎了~至少會定義與增刪改查,物件型別這個坑還很深,我們現在才剛踏進去,明天先介紹函式(function),介紹完函式,我們再繼續把物件型別這個坑挖深!