1 认识对象
认识对象
对象(object)是"键值对"的集合 表示属性和值的映射关系
对象的语法
k和v之间用冒号分隔 每组k:v之间用逗号分隔 最后一个k:v对后可以不书写逗号
属性是否加引号
如果对象的属性键名不符合JS表示符命名规范 则这个键名必须用引号包裹
如何访问
可以用"点语法"访问对象中指定键的值
属性的访问
如果属性名不符合JS表示符命名规范 则必须使用方括号的写法来访问
属性的访问
如果属性名以变量形式储存 则必须使用方括号形式
<script>
var xiaomi = {
name : "小米",
age : 12,
sex : "男",
hobbies:["足球","编程"],
"favorite-book":"舒克和贝塔"
}
console.log(xiaomi.name)
console.log(xiaomi.age)
console.log(xiaomi.sex)
console.log(xiaomi.hobbies)
console.log(xiaomi["favorite-book"])
</script>
属性的更改
直接使用赋值运算符重新对某属性赋值即可更改属性
属性的创建
如果对象本身没有某个属性值 则用点语法赋值时 这个属性会被创建出来
属性的删除
如果要深处某个对象的属性 需要使用delete操作符
<script>
var obj = {
a: 10,
b: 20
}
// 对象属性的修改
obj.b = 40
obj.b++
console.log(obj.b)
// 对象属性的增加
obj.c = 60
console.log(obj)
// 对象属性的删除
delete obj.a
console.log(obj)
</script>
2 对象的方法
对象的方法
如果某个属性值是函数 则它也被称为对象的方法
方法的调用
使用"点语法"可以调用对象的方法
xiaoming.sayHello()
方法和函数
方法也是函数 只不过方法是对象的"函数属性" 它需要用对象打点调用
在正式学习了什么是"方法"之后 就能深入理解之前我们学习的一些函数的书写形式 比如:
3 对象的遍历
对象的遍历
和遍历数组类似 对象也可以被遍历 遍历对象需要使用for...in...循环
使用for...in...循环可以遍历对象的每个键
for...in...循环
<script>
var obj = {
a : 11,
b : 22,
c : 88
}
for (var k in obj) {
console.log("对象obj的属性" + k + "的值是" + obj[k])
}
</script>
4 对象的浅克隆
基本类型值和引用类型值
对象是引用类型值
对象是引用类型值 这意味着:
- 不能用
var obj2 = obj1这样的语法克隆一个对象 - 使用==或者===进行对象的比较时 比较的是它们是否为内存中的同一个对象 而不是比较值是否相同
<script>
// 例1
var obj1 = {
a : 1,
b : 2,
c : 3
}
var obj2 = {
a : 1,
b : 2,
c : 3
}
console.log(obj1 == obj2) // false
console.log(obj1 === obj2) // false
console.log({} == {}) //false
console.log({} === {}) //false
</script>
<script>
// 例2
var obj3 = {
a : 10
}
var obj4 = obj3
obj3.a++
console.log(obj4)
</script>
对象的浅克隆
- 复习什么是浅克隆: 只克隆对象的"表层" 如果对象的某些属性值又是引用类型值 则不进一步克隆它们 只是传递它们的引用
- 使用
for...in...循环即可实现对象的浅克隆
<script>
// 克隆咯
var obj1 = {
a : 1,
b : 2,
c : [44,55,66]
}
var obj2 = {}
for(var k in obj1) {
// 每遍历一个k属性 就给obj2也添加一个同盟的k属性
// 值和obj1的k属性值相同
obj2[k] = obj1[k]
}
obj1.c.push(77)
console.log(obj2)
</script>