物件是參照型、複合型資料,因此物件的操作主要包括參照、複製、克隆和銷毀等。
參照物件
物件是參照型資料,賦值操作實際上就是賦予地址。
範例
下面範例定義一個物件 obj,然後賦值給 obj1 後,obj 就全等於 obj1,它們都參照同一個物件,也就是說它們的值都是同一個地址。
var obj = { //定義物件
x : true,
y : false
}
var obj1 = obj; //參照物件
console.log(obj1 === obj); //true,說明兩個物件相同
console.log(obj1.x); //true
console.log(obj.x); //true
複製物件
複製物件就是利用 for/in 遍歷物件,然後把每個物件成員賦值給另一個物件。
範例
在下面範例中,通過複製操作把 obj 的屬性轉移給 obj1 物件。
var obj = { //定義物件
x : true,
y : false
}
var obj1 = {};
for (var i in obj) { //遍歷obj物件,把它的所有成員賦值給物件obj1
obj1[i] = obj[i];
}
console.log(obj1 === obj); //false,說明兩個物件不同
console.log(obj1.x); //true
console.log(obj.x); //true
克隆物件
克隆物件也是一種複製操作,不過它的執行效率更高一些。
【實現方法】
1) 封裝一個克隆工具。為 Function 型別擴充套件一個原型方法。
var clone = function (obj) { //物件克隆方法
function Temp() {}; //新建空建構函式
Temp.prototype = obj; //把引數物件賦值給該建構函式的原型方法
return new Temp(); //返回範例化後的物件
}
2) 呼叫工具函數 clone() 把 obj 克隆給 obj1。
var obj = {
x : true,
y : false
}
var obj1 = {};
obj1 = clone(obj);
3) 檢測物件 obj1,其擁有物件 obj 所有屬性,但是它們不全等。
console.log(obj1 === obj); //false,說明兩個物件不同
console.log(obj1.x); //true
console.log(obj.x); //true
這裡通過直接賦值的方式把一個物件傳遞給另一個臨時建構函式的原型物件,然後範例化型別函數,並返回這個範例物件,它擁有了引數物件的所有成員,但是不再與原引數物件保持聯絡。
銷毀物件
JavaScript 能夠自動回收無用儲存單元,當一個物件沒有被參照時,該物件就被廢除了,JavaScript 會自動銷毀所有廢除的物件。把物件的所有參照都設定為 null,可以強制廢除物件。
範例
當物件不被任何變數參照時,JavaScript 會自動回收物件所佔用的資源。
var obj = { //定義物件,被變數obj參照
x : true,
y : false
}
obj = null; //設定為空,廢除參照