1. 什么是对象:
- 其实就是一种事物的描述,在程序中对象是一种数据类型
- 程序中的对象主要用来:存储信息
2.js的对象的分类
- 内置对象:
- ES提供可以直接被使用的对象,已经是一个具体的实例了,不需要创建
- Math对象,数学对象
- 本地对象:
- 其实只是ES提供的一种类方法,需要被实例化之后,才能使用
- 需要被new执行之后,才能使用
- String,Object,Array,Number,Boolean,RegExp,Date
- 宿主对象:
- 由浏览器或W3C提供的运行ES的环境,所带的对象
- BOM:window,DOM:document
- 所有的自定义对象
- 天天都在学
- 注:实例化:转化成实际的案例
补充关键字:delete,用来删除自定义对象的属性
- delete
- `delete 对象.属性名`;
- 只能删除自定义对象的属性,且一次只能删一个属性
3. 创建对象:
①字面量:
```js
var o1 = {}
```
② 构造函数:
```js
var o2 = new Object();
```
4. 对象的意义和本质
①意义(功能)
- 存储数据(信息)
- 编程(面向对象编程)
②本质
- 键值对
5. 对象的操作
①点语法(.)
- 对象.属性名
注:只能访问固定的属性名,不能使用变量作为属性名
console.log(obj.name);
②中括号语法:[]
// 属性名为变量时,属性名为不确定的值时
var attr = "name";
console.log(obj[attr]);
// 属性名为具体的值,不是变量时,也可以用[]语法,但是这个值必须用引号包裹
console.log(obj["name"]);
③数组的遍历:
//for-in不是循环,是一个遍历语句,遍历对象
//枚举对象所有的属性,根据枚举出的属性,获取属性值
for(var i in obj){
console.log(i);
console.log(obj[i]);
}
- 注意:任何两个对象都不相等
如果相等了,意味着就是一个对象
补充:对象的补充-栈堆
- 内存
- 用来运行数据的空间,内部又区分了不同的存储方式(栈和堆)
- 栈:一般用来存储变量名和地址,空间小,稳定,不可修改
- 堆:一般用来存储数据,空间大,可被修改
- 关系:一一对应,多对一,不能一对多
- 存取规则:
- 栈:先进后出:杯子
- 堆:先进先出:掉底的杯子
- 数据类型的分类
- 基本类型(值传递)
- 数据就在栈中
- 不存在深浅拷贝,默认就是深拷贝
- 引用类型(引用传递的数据)
- 栈中只保存了一个地址,地址指向堆中的某个数据
- 存在深浅拷贝,默认是浅拷贝
- 目前会有一些影响
- 如何实现深拷贝?
- for-in遍历属性