ECMA-262对象的定义:无序属性的集合,其属性可以包含基本值,对象,或者函数。可以将对象想象成散列表:键值对,其中值可以是数据或者函数。ECMAScript中的对象其实就是一组数据(属性)和功能(方法)的集合。
- 创建
- 对象字面量
- var o={ key:value, key2:value }
- 构造函数
- var o=new Object();
- o.name='lisa';
- o.age=20;
- 对象字面量
- 访问对象属性
- 点操作符
- console.log(o.name);
- []
- [""]:o["name"] 必须是字符串类型,对于变量的访问或者复杂的标识符名称访问比较容易
- 点操作符
- 删除对象属性
- delete o.name
- 检测属性
- in :检测当前的属性是否为对象的私有/继承属性,如果不存在返回false
- hasOwnProperty():检测给定的属性是否是对象的自有属性,对于继承属性将返回false
- propertyIsEnumerable():检测给定的属性是否是该对象的自有属性,并且该属性是可枚举的。通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性。

对象序列化
对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数,RegExp,Error对象,undefined值不能序列化和反序列化。
- JSON.stringify() : 将对象类型转换为json字符串
- JSON.parse():将json字符串类型转化为对象

构造函数和原型对象
所有的函数都有一个原型对象
所有的对象都有一个constructor属性
prototype: 原型对象
constructor:构造函数


- 静态属性/方法:声明在函数本身内部,只能函数本身调用
- Object.assign(a,b):将b对象合并到a对象中
- Object.keys():当前对象的所有属性名所组成的数组
- Object.values(): 当前对象的所有属性值所组成的数组
- Object.defileProperty():定义属性


- 非静态属性/方法:声明在函数的原型对象中,所有实例对象均可以调用
- constructor:构造者
- Object.prototype.constructor
- new Object().constructor
- toString()
- valueof()
- hasOwnProperty()
- propertyIsEnumerable() 测试属性是否可以遍历
- constructor:构造者
- Object.defileProperty(obj,key,{}):定义属性
- {}:
- 基础属性描述
- value:' ' ; 设置属性值
- writable: 是否可写,默认false
- enumerable:是否可遍历,默认false
- configurable:当前属性是否可配置/删除,默认false
- 存取操作符
- 不能和value同时使用
- set:function
- get:function
- 基础属性描述
- {}:



this是函数内的一个方法,代表函数得执行环境。this指向函数的执行环境,谁调用指向谁。如果没有调用的 就指向全局环境。