0%

JavaScript 基礎 物件篇

什麼是物件 Object? 物件可以包山包海。

物件是 JavaScript 中的參考資料型別,它擁有複合的值,可以儲存不同類型的值(value),然後透過 Key 來取值。
Object 也可以看成是屬性的無序列集合,每個屬性都是一對 Key:value。物件除了可以擁有自己的屬性,還可以透過原型物件來繼承屬性。

在 JavaScript 的資料型別裡,除了stringnumberbooleannullundefined之外,其他都是物件型別。
物件以外的型別資料的值是無法修改與不可變的,我們稱為這類的資料型別為「基本型別」,「基本型別」的比較,是以「值」來比較,如果兩個變數的值相等,就會被視為這兩個變數是相等的。

物件是「參考資料型別」,它的值是被保存在記憶體裡的物件,當一個變數是物件(參考型別)時,實際上變數中保存的並不是這個物件本身,而是記憶體的位址。
當我們複製一個物件給另一變數時,這個變數會依照這個變數的參考值(記憶體的位址)給另一個變數參考,而不是複製物件,也就是說複製物件的值,會同時指向被複製的物件記憶體位址。也因此如果更動其中一個物件變數的內容,另一個物件變數內容也會一起更動。

在讀一些中文簡體的資料時,我們會看到類似:「简单来说栈内存用来保存变量和基本类型。堆内存用来保存对象」,用繁體的解釋是:基本型別是依照記憶體所存的值當依據,參考型別則是會先以記憶體位址為參考,才將裡面的值取出,但因為會參考同一個記憶體位址,所以找到的值也ㄧ樣。

如何創建一個物件

有兩種方法:

1
2
3
4
5
6
7
8
9
// 第一種使用建構式:
let obj = new Object();
obj.name = "Tracy";
obj.age = 18;
// 第二種方法,也是我們較常用的方法,以 {} 表示物件。
let obj = {
name = "Tracy";
age = 18;
};

物件取值與賦值的方法

  1. 以物件名.屬性名 ex.obj.name,使用「點」
  2. 使用[] ex.obj['屬性名'],使用[中括號]

和 Array 不同的是,Array 是以索引index和值value做配對,但 objet 是以鍵Key和值Valur配對使用。

Array

let arr = ["Tracy", 42, "Paris", "Taiwan" ];

index 0 1 2 3
value Tracy 42 Paris Taiwan

取值的方法:arr[0]

Object

let obj= { name : "Tracy", age: 42, city: "Paris", pays: "Taiwan" }

Key name age city pays
value Tracy 42 Paris Taiwan

取值的方法:obj.name

Array 和 Object 最大的不同是 Array 是有順序的,會隨著索引值的順序,而 Object 的值是跟著 Key,所以即使變換順序也不會受影響。

Object 取值的 ==.== obj.name如同中文的「的」,我們在其他地方也常用的這個點。

1
<a id="alink" href="https://google.com" target="_blank"> c'est un lien </a>

想要抓取 DOM 的值也可利用此一方法:

1
2
3
4
let attr = document.getElementById('alink');
console.log(attr.href); // 會抓到 <a> 裡的 href 這個屬性的值
// 修改的方法
attr.href = 'www.tsuifei.com';

如果把上述的 HTML<a>改為物件,即是:

1
2
3
4
5
let a = {
id: 'alink',
href: 'https://google.com',
target: '_blank'
};

修改物件裡的某一值:

1
2
3
4
5
6
7
8
let obj = {
name: 'Tracy',
age: 42,
city: 'Paris',
pays: 'Taiwan'
};

obj.age = 50; // 重新給值

常見的物件使用方式

1
let obj = {};