创建对象
new 的主要作用就是执行一个构造函数、返回一个实例对象
- 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
- 属性和方法被加入到 this 引用的对象中
- 新创建的对象由 this 所引用,并且最后隐式的返回 this
new Proxy()表示生成一个Proxy实例,target参数表示所要拦截的目标对象,handler参数也是一个对象,用来拦截和监视外部对对象的访问
- 对象字面量: var obj = {}; 原型是Object.prototype
- 构造函数: var obj = new Object();
怎么判断两个对象相等?
可以转换为字符串来判断 JSON.stringify(obj)==JSON.stringify(obj2);//true
浅拷贝
浅拷贝只复制对象的第一层属性,嵌套对象仍然是引用(也就是修改会影响原来的数据)。如果数据结构较为简单,或不需要修改嵌套对象时,浅拷贝通常足够。 浅拷贝( Object.assign
或展开运算符) 只拷贝第一层属性,嵌套对象的引用会共享
- Object.assign
- 或者展开运算符
深拷贝
深拷贝会递归复制对象的所有层级,确保嵌套对象的修改不会影响原对象。当数据结构复杂,或者需要独立的副本时,需要深拷贝。
- 可以通过 JSON.parse(JSON.stringify(object)) 来解决
- 该方法也是有局限性的:会忽略 undefined、不能序列化函数、不能解决循环引用的对象
常用的遍历属性方法
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。