JavaScript Object (物件)

JavaScript 物件 (object) 是一個複合資料型態 (composite data type),可以儲存不定數量的鍵值對 (key-value paris),而一組鍵值對我們稱做物件的一個屬性 (property)。一個屬性的值 (value) 可以是任何資料型態 (也可以是函數);而屬性的名稱 (key / name) 是一個字串型態。

物件宣告 (Creating Objects)

有兩種方式可以建立一個物件:

Object Constructor (物件建構式)

用 new 關鍵字加上 Object() 來宣告一個物件:

var myObj = new Object();

Object Literal (物件實字)

object literal 是最常用也最方便的語法,用 {} 就可以宣告一個物件:

var myObj = {};

物件的屬性 (Object Properties)

我們可以用 . 運算子來存取物件的屬性。

語法:

objectName.propertyName

例如:

var myObj = {};

// 建立一個叫 color 的屬性,值是 blue
myObj.color = 'blue';

// 存取物件屬性
var myColor = myObj.color;

或用 [] 運算子來存取物件的屬性。

語法:

objectName['propertyName']

例如:

var myObj = {};

// 建立一個叫 color 的屬性,值是 blue
myObj['color'] = 'blue';

// 存取物件屬性
var myColor = myObj['color'];

[] 特別的地方在於,中括號裡面可以是一個變數,例如:

var myObj = {};
var propName = 'color';

// 建立一個叫 color 的屬性,值是 blue
myObj[propName] = 'blue';

// 會輸出 blue
console.log(myObj[propName]);

// 但如果你用 . 運算子
// 會新增一個叫 propName 的屬性,而不是叫 color
myObj.propName = 'blue';
[] 運算子除了可以使用變數之外,還有當你的屬性名稱包含空白或點字元的時候。例如 myObj['hello ...'] = 'world'

用 object literal 我們也可以在宣告物件時,同時建立屬性!

語法:

var obj = {property1: value1, property2: value2, ..., propertyN: valueN} 

例如:

// 建立一個物件,這物件有兩個屬性 color 和 height
var myObj = {'color': 'blue', 'height': 101};

object literal 中的屬性名稱的引號可以省略:

// 建立一個物件,這物件有兩個屬性 color 和 height
var myObj = {color: 'blue', height: 101};

物件的方法 (Object Methods)

物件的屬性值如果是一個函數,我們稱它是物件的方法 (method)。

物件的方法可以定義一個物件可以做的動作 (action),你可以像執行函數一樣執行一個物件的方法:

objectName.methodName();

例如:

var me = {
    firstName: 'Mike',
    lastName: 'Lee',
    age: 30,
    fullName: function() {
        return this.firstName + ' ' + this.lastName;
    }
}

// name = 'Mike Lee'
var name = me.fullName();

this 是物件方法中可以使用的關鍵字,this 是一個物件參考,當物件在執行時,可以使用 this 來代表 "自己"。

JavaScript 內建物件 (JavaScript Native Objects)

JavaScript 有一些內建物件,也可以稱作資料型態,包含:

每一種物件都有各自的屬性 (attribute) 和方法 (method) 可以使用。