03-对象

63 阅读1分钟

创建对象

new 的主要作用就是执行一个构造函数、返回一个实例对象

  • 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
  • 属性和方法被加入到 this 引用的对象中
  • 新创建的对象由 this 所引用,并且最后隐式的返回 this

new Proxy()表示生成一个Proxy实例,target参数表示所要拦截的目标对象,handler参数也是一个对象,用来拦截和监视外部对对象的访问

image.png

  • 对象字面量: var obj = {}; 原型是Object.prototype
  • 构造函数: var obj = new Object();

怎么判断两个对象相等?

可以转换为字符串来判断 JSON.stringify(obj)==JSON.stringify(obj2);//true

浅拷贝

浅拷贝只复制对象的第一层属性,嵌套对象仍然是引用(也就是修改会影响原来的数据)。如果数据结构较为简单,或不需要修改嵌套对象时,浅拷贝通常足够。 浅拷贝( Object.assign 或展开运算符) 只拷贝第一层属性,嵌套对象的引用会共享

  • Object.assign
  • 或者展开运算符

image.png

image.png

深拷贝

深拷贝会递归复制对象的所有层级,确保嵌套对象的修改不会影响原对象。当数据结构复杂,或者需要独立的副本时,需要深拷贝。

  • 可以通过 JSON.parse(JSON.stringify(object)) 来解决
  • 该方法也是有局限性的:会忽略 undefined、不能序列化函数、不能解决循环引用的对象

image.png

常用的遍历属性方法

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。