数据类型

  • 基本类型 栈内存
  • 引用类型 堆内存 变量 指向实际堆内存中实际对象的引用

浅拷贝

  • 只拷贝一层
  • 引用类型只拷贝内存地址
  • 修改一个对象属性,另外一个对象属性会发生改变

实现方式

  • Object.asign()
  • Array.prototype.slice()
  • Array.prototype.concat()
  • 扩展运算符

深拷贝

开辟新的栈,两个对象属性完全相同,对应两个不同地址。修改一个对象属性,另外一个对象属性不会发生改变

实现方式

  • _.cloneDeep() lodash 深拷贝
  • jQuery.extend()
  • JSON.stringify() 会忽略 undefined symbol 函数
  • 手写循环递归

区别

  • 浅拷贝 只复制属性指向某个对象的指针,不复制对象本身,新旧对象共享同一块内存 修改对象属性会改变原对象
  • 深拷贝 创造一个一模一样的对象,新旧对象不共享内存,修改对象属性不会改变原对象