JavaScript 基礎 (二) - 引用資料型別 (物件)

joinmouse發表於2019-07-31

1、物件

上一篇文章寫了基本資料型別,還有的一種很重要的資料型別(引用型別)就是 - 物件。

物件就是一組“鍵值對”(key-value)的集合,是一種無序的複合資料集合。

var obj = {
  foo: 'Hello',
  bar: 'World',
  100: true,
};

obj.foo   // 'Hello'
obj[100]  //true 如果鍵名是數值,會被自動轉為字串(等價於obj.['100'] )

2、屬性和方法

物件的每一個鍵名又稱為“屬性”(property),它的“鍵值”可以是任何資料型別。如果一個屬性的值為函式,通常把這個屬性稱為“方法”,它可以像函式那樣呼叫。

var obj = {
  foo: function (x) {
    return 2 * x;
  }
};

obj.foo(2) // 4 呼叫foo方法

3、物件的引用

物件透過引用來傳遞。即若不同的變數名指向同一個物件,那麼它們都是這個物件的引用,也就是說指向同一個記憶體地址。修改其中一個變數,會影響到其他所有變數。

var o1 = {};
var o2 = o1;

o1.a = 1;
o2.a // 1

o2.b = 2;
o1.b // 2

這裡o1o2指向同一個物件,因此為其中任何一個變數新增屬性,另一個變數都可以讀寫該屬性。

同時若取消某一個變數對於原物件的引用,不會影響到另一個變數

var o1 = {};
var o2 = o1;

o1 = 1;
o2 // {}

o1o2指向同一個物件,然後o1的值變為1,這時不會對o2產生影響,o2還是指向原來的那個物件。

變數a、b、c 每個都引用一個不同的空物件

var a = {};
var b = {};
var c = {};

4、物件的操作

讀取

讀取物件的值,有兩種方法,一種是使用點運算子,還有一種是使用方括號運算子

var obj = {
  p: 'Hello'
};

obj.p // "Hello"
obj['p'] // "Hello"

優先考慮使用.表示,因為它更緊湊且可讀性更好

賦值

var obj = { p: 1 };

// 等價於

var obj = {};
obj.p = 1;

獲取物件鍵名

var obj = {
  key1: 1,
  key2: 2
};

Object.keys(obj);// ['key1', 'key2']

刪除

var obj = { p: 1 };
Object.keys(obj) // ["p"]

delete obj.p // true
obj.p // undefined
Object.keys(obj) // []

注意的是,delete命令只能刪除物件本身的屬性,無法刪除繼承的屬性, 這點會在後面寫原型鏈的時候提到


本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章