一、認識對象
1. 對象
-
對象(object)是
鍵值對
的集合,表示屬性和值的映射關系
。 -
對象的語法
- k和v之間用冒號分割,每組
k:v
之間用逗號分割,最后一個k:v
對后可以不書寫逗號。
- k和v之間用冒號分割,每組
-
屬性是否加引號
- 如果對象的屬性鍵名不符合命名規范,則這個鍵名必須用引號包裹。
var xiaoming = {name: '小明',age: 12,'favorite-book': '三毛流浪記'}
- 如果對象的屬性鍵名不符合命名規范,則這個鍵名必須用引號包裹。
-
屬性的訪問
- 可以用
點語法
訪問對象中指定鍵的值。 - 如果屬性名不符合JS標識符命名規范,則必須用方括號的寫法來訪問。
- 如果屬性名以變量形式存儲,則必須使用方括號形式。
- 可以用
-
屬性的更改
- 直接使用賦值運算符重新對某屬性賦值即可更改屬性
-
屬性的創建
- 如果對象本身沒有某個屬性值,則用點語法賦值時,這個屬性會被創建出來
-
屬性的刪除
- 如果要刪除某個對象的屬性,需要使用
delete
操作符var obj = { a: 1, b: 2 }; delete obj.a;
- 如果要刪除某個對象的屬性,需要使用
2. 對象方法
-
如果
某個屬性值是函數
,則它也被稱為對象的"方法"
var xiaoming = {name: '小明', age: 12, sex: '男', hobbys: ['足球', '游泳', '編程'], 'favorite-book': '舒克和貝塔', sayHello: function () { // sayHello方法console.log('你好,我是小明,今年12歲,我是個男生');}};
-
使用"點語法"可以調用對象的方法
-
方法和函數
方法也是函數
,只不過方法是對象的"函數屬性",它需要用對象打點調用。
3. 對象的遍歷
- 和遍歷數組類似,對象也可以被遍歷,遍歷對象需要使用
for...in...循環
。 - 使用
for...in...
循環可以遍歷對象的每個鍵
。for (var k in obj) { console.log('屬性' + k + '的值是' + obj[k]); }
- 循環變量
k
,它會依次成為對象的每一個鍵。 obj
要遍歷的對象。obj[k]
要遍歷的對象。
- 循環變量
4. 對象的深淺克隆
- 對象是引用類型值
- 對象是引用類型值,這意味著:
- 不能用
var obj2 = obj1
這樣的語法克隆一個對象。 - 使用
==
或者===
進行對象的比較時,比較的是它們是否為內存中的同一個對象,而不是比較值是否相同。
- 不能用
- 對象是引用類型值,這意味著:
- 對象的淺克隆
- 淺克隆:
只克隆對象的"表層"
,如果對象的某 些屬性值又是引用類型值,則不進一步克隆它們,只是傳遞 它們的引用 - 使用
for...in...
循環即可實現對象的淺克隆
- 淺克隆:
- 對象的深克隆
- 深克隆:
克隆對象的全貌
,不論對象的屬性值是 否又是引用類型值,都能將它們實現克隆。 - 和數組的深克隆類似,對象的深克隆需要使用遞歸。
- 深克隆: