iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

每個物件由 屬性(properties)方法(methods) 組成:

  • 屬性:以 key-value pair 的方式呈現。
  • 方法:屬於物件的 function。

JavaScript 的物件本質上是一種 hashtable
存取屬性的方法:

  • Dot notationobject.key
  • Bracket notationobject["key"](必須是字串型別)

建立物件與存取屬性

var anObject = {
  key1: "value1",
  key2: "value2"
};

// 存取方式
console.log(anObject.key1);       //"value1"
console.log(anObject["key1"]);    //"value1"

// 修改屬性
anObject["key1"] = "new value";
console.log(anObject.key1);       //"new value"

// 存取不存在的屬性
console.log(anObject.keyNotExist); //undefined

物件與陣列的差別

雖然陣列看起來是序列資料結構,但在 JavaScript 裡,陣列其實也是物件

let arr = [1, 2, 3, 4];
console.log(typeof arr);         //object
console.log(Array.isArray(arr)); //true

同樣地,function 也是一種特殊的物件。

Array 與 Function 都是 Object 的特殊型別

巢狀物件與實務範例

var Peter = {
  name: 'Peter',
  score: [1, 2, 3],
  address: 'taipei city',
  phone: "0909090909",
  father: {
    name: 'Nick',
    phone: '12345'
  }
};

console.log(Peter.name);           //"Peter"
console.log(Peter.father.name);    //"Nick"

物件也常搭配陣列使用,例如建立學生清單:

var students = [];

var Peter = {
  name:'Peter',
  score:100,
  address:'taipei city',
  phone:"0909090909"
};

students.push(Peter);
console.log(students[0].name);   //"Peter"

this 關鍵字

在物件方法中,this 代表「呼叫該方法的物件」:

let Wilson = {
  first_name: "KK",
  age: 27,
  sayHi() {
    console.log(this.first_name + " says hi");
  }
};

Wilson.sayHi();  //"KK says hi"

若 function 沒有掛在物件上呼叫,this 則會指向 全域物件(瀏覽器是 window)

物件的強制轉型

當物件與運算子一起使用時,JavaScript必須先把物件轉為 primitive value,才能進行運算。
這個過程依據 ToPrimitive 演算法,會依序嘗試呼叫 valueOf()toString()

  • 物件 → Boolean:任何物件都會轉為 true
  • 物件 → String:優先呼叫 toString()
  • 物件 → Number:優先呼叫 valueOf()

範例

var a = {};
console.log(a.toString()); //[object Object]

var b = { name: "Michael" };
console.log(b.valueOf());  //{ name: "Michael" }

覆寫 valueOf 會改變數值運算的結果:

var a = {
  valueOf: function() {
    return 10;
  }
};
console.log(a + 3);  //13

如果物件無法直接轉成數值,JavaScript 就會退回使用 toString()

console.log(3 + {}); //"3[object Object]"

參考資料


上一篇
Day15|布林值(Boolean)
下一篇
Day17|陣列(Array)
系列文
程式小白的 30 天轉職挑戰18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言