对象
05:对象
一、对象的概念和特点
- 对象:是一种复杂数据,是数据的打包形式
- 无序集合,object对象,花括号形式
- 以键值对的形式存在,键和值一一对应,使用冒号连接,键值对之间使用逗号隔开
- 键:key,要遵守变量的命名规则,一个对象中不允许出现重复的键
- 值:value,就是正常数据
- 使用场景:一般用来打包非同类但属于同一个个体的数据
- 一个班级中某一个学生的所有信息
- 姓名,性别,年龄,手机号,住址
- 有序集合,array对象,中括号形式
- 数据之间默认以索引的形式,进行标记,索引从0开始,到length-1
- 使用场景:一般用来打包同类数据
- 一个班级所有学生的姓名
- 姓名,姓名,姓名
- 无序集合,object对象,花括号形式
- 特点:
- 提升了数据的查找速度
- 提升了数据的传输速度
- 本质:键值对
- 键和值成对出现,键和值使用冒号连接,键值对之间使用逗号隔开,使用花括号做包裹
{name:"admin",age:18,sex:"男"}
- 意义
- 存储数据
- 编程(面向对象编程)
二、对象的创建
- 字面量:
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语句
1 | var obj = { |
五、数据类型分类
- 基本类型(值传递):string,number,boolean,undefined,null
- 只占用了栈,没有使用堆
- 拷贝时,只拷贝值。值就是地址,地址就是值,等同于完全拷贝(深拷贝)
- 也叫:值传递的数据
- 复杂类型(引用传递):object,function
- 变量名存在栈中,数据存在堆中
- 拷贝时,默认只拷贝地址。地址是地址,值是值,浅拷贝
- 也叫:引用传递的数据
六、内存的栈堆
- 栈:变量名,地址,空间相对较小,稳定,不可修改
- 堆:数据,空间相对较大,可以修改
- 栈和堆的关系:一一对应,能多对一,不能一对多
- 栈中保存了堆的地址
- 栈堆的存取规则(了解)
- 栈的存取规则:先进后出
- 堆的存取规则:先进先出
七、深浅拷贝
- 浅拷贝:拷贝的是地址,修改拷贝之后的数据会影响拷贝之前的数据
- 复杂数据(引用传递)默认浅拷贝
- 深拷贝:拷贝的是值,不拷贝地址,修改拷贝之后的数据不影响拷贝之前的数据
- 基本数据(值传递)默认深拷贝
- 深拷贝复杂数据:遍历要拷贝的复杂数据,解析出每个键和值,逐个拷贝值
- 简单深拷贝:只深拷贝一层或若干层的复杂数据的值
1 | var obj1 = {name:"admin", age:18} |
* 深拷贝:拷贝所有层级的复杂数据的值
+ 需要配合递归实现。参考:[https://blog.csdn.net/weixin_41636483/article/details/112622267?spm=1001.2014.3001.5501](https://blog.csdn.net/weixin_41636483/article/details/112622267?spm=1001.2014.3001.5501)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 !
评论