一、认识对象
1. 对象
对象(object)是
键值对
的集合,表示属性和值的映射关系
。对象的语法
- k和v之间用冒号分割,每组
k:v
之间用逗号分割,最后一个k:v
对后可以不书写逗号。
- k和v之间用冒号分割,每组
属性是否加引号
- 如果对象的属性键名不符合命名规范,则这个键名必须用引号包裹。js
var xiaoming = { name: '小明', age: 12, 'favorite-book': '三毛流浪记' }
- 如果对象的属性键名不符合命名规范,则这个键名必须用引号包裹。
属性的访问
- 可以用
点语法
访问对象中指定键的值。 - 如果属性名不符合JS标识符命名规范,则必须用方括号的写法来访问。
- 如果属性名以变量形式存储,则必须使用方括号形式。
- 可以用
属性的更改
- 直接使用赋值运算符重新对某属性赋值即可更改属性
属性的创建
- 如果对象本身没有某个属性值,则用点语法赋值时,这个属性会被创建出来
属性的删除
- 如果要删除某个对象的属性,需要使用
delete
操作符jsvar obj = { a: 1, b: 2 }; delete obj.a;
- 如果要删除某个对象的属性,需要使用
2. 对象方法
如果
某个属性值是函数
,则它也被称为对象的"方法"
jsvar xiaoming = { name: '小明', age: 12, sex: '男', hobbys: ['足球', '游泳', '编程'], 'favorite-book': '舒克和贝塔', sayHello: function () { // sayHello方法 console.log('你好,我是小明,今年12岁,我是个男生'); } };
使用"点语法"可以调用对象的方法
方法和函数
方法也是函数
,只不过方法是对象的"函数属性",它需要用对象打点调用。
3. 对象的遍历
- 和遍历数组类似,对象也可以被遍历,遍历对象需要使用
for...in...循环
。 - 使用
for...in...
循环可以遍历对象的每个键
。jsfor (var k in obj) { console.log('属性' + k + '的值是' + obj[k]); }
- 循环变量
k
,它会依次成为对象的每一个键。 obj
要遍历的对象。obj[k]
要遍历的对象。
- 循环变量
4. 对象的深浅克隆
- 对象是引用类型值
- 对象是引用类型值,这意味着:
- 不能用
var obj2 = obj1
这样的语法克隆一个对象。 - 使用
==
或者===
进行对象的比较时,比较的是它们是否为内存中的同一个对象,而不是比较值是否相同。
- 不能用
- 对象是引用类型值,这意味着:
- 对象的浅克隆
- 浅克隆:
只克隆对象的"表层"
,如果对象的某 些属性值又是引用类型值,则不进一步克隆它们,只是传递 它们的引用 - 使用
for...in...
循环即可实现对象的浅克隆
- 浅克隆:
- 对象的深克隆
- 深克隆:
克隆对象的全貌
,不论对象的属性值是 否又是引用类型值,都能将它们实现克隆。 - 和数组的深克隆类似,对象的深克隆需要使用递归。
- 深克隆: