一、对象的概念和特点
1.对象:是一种复杂数据,是数据的打包方式
无序集合,object对象,花括号形式
- 以键值对的形式存在,键和值一一对应,使用冒号连接,键值对之间使用逗号隔开
- 键:key,要遵守变量的命名规则,一个对象中不允许出现重复的键
- 值:value,就是正常数据
使用场景:一般用来打包非同类但属于同一个个体的数据
一个班级中某一个学生的所有信息姓名,
性别,年龄,手机号,住址
- 有序集合,array对象,中括号形式
- 数据之间默认以索引的形式,进行标记,索引从0开始,到length-1
- 使用场景:一般用来打包同类数据
- 一个班级所有学生的姓名
- 姓名,姓名,姓名
2.特点:
- 提升了数据的查找速度
- 提升了数据的传输速度
3.本质:键值对
-
- 键和值成对出现,键和值使用冒号连接,键值对之间使用逗号隔开,使用花括号做包裹
-
{name:"admin",age:18,sex:"男"}
4.意义
-
- 存储数据
- 编程(面向对象编程)
二、对象的创建
- 字面量:
var obj = { }
- 构造函数:
var obj = new Object()
三、对象的操作语法
- 点语法:当对象的键为具体的值时
-
- 获取对象属性:
obj.name
- 设置对象属性:
obj.age = 18
- 删除对象属性:
delete obj.name
- 获取对象属性:
- 中括号语法:当对象的键为不具体的值,为变量中的值时
-
- 获取对象属性:
obj[key]
- 设置对象属性:
obj[key] = "hello"
- 删除对象属性:
delete obj[key]
key
为变量
- 获取对象属性:
四、对象的遍历
-
for-in语句
var obj = {
name:"admin",
age:18,
sex:"男"
}
for(var key in obj){
// 对象的键
console.log(key)
// 对应键的值
console.log(obj[key])
}
五、数据类型分类
- 基本类型(值传递):string,number,boolean,undefined,null
-
- 只占用了栈,没有使用堆
- 拷贝时,只拷贝值。值就是地址,地址就是值,等同于完全拷贝(深拷贝)
- 也叫:值传递的数据
- 复杂类型(引用传递):object,function
-
- 变量名存在栈中,数据存在堆中
- 拷贝时,默认只拷贝地址。地址是地址,值是值,浅拷贝
- 也叫:引用传递的数据
六、内存的栈堆
- 栈:变量名,地址,空间相对较小,稳定,不可修改
- 堆:数据,空间相对较大,可以修改
- 栈和堆的关系:一一对应,能多对一,不能一对多
-
- 栈中保存了堆的地址
- 栈堆的存取规则(了解)
-
- 栈的存取规则:先进后出
- 堆的存取规则:先进先出
七、深浅拷贝
- 浅拷贝:拷贝的是地址,修改拷贝之后的数据会影响拷贝之前的数据
-
- 复杂数据(引用传递)默认浅拷贝
- 深拷贝:拷贝的是值,不拷贝地址,修改拷贝之后的数据不影响拷贝之前的数据
-
- 基本数据(值传递)默认深拷贝
- 深拷贝复杂数据:遍历要拷贝的复杂数据,解析出每个键和值,逐个拷贝值
-
-
- 简单深拷贝:只深拷贝一层或若干层的复杂数据的值
-
var obj1 = {name:"admin", age:18}
// 浅拷贝
var obj2 = obj;
obj2.name = "root"
console.log(obj1) // {name:"root", age:18}
console.log(obj2); // {name:"root", age:18}
console.log(obj1 === obj2); // true
// 深拷贝
var obj3 = {};
for(var i in obj1){
obj3[i] = obj1[i];
}
obj3.name = "root";
console.log(obj1) // {name:"admin", age:18}
console.log(obj3); // {name:"root", age:18}
console.log(obj1 === obj3); // false