lodash _.deepClone(obj)

Json.parse(Json.string(obj))

只复制一层

  1. 序列化后会将 function,undefined 丢失
  2. 有时间对象,则序列化后会将时间对象转换为字符串格式
  3. NaN、Infinity和-Infinity,则序列化后会变成null
  4. 由构造函数生成的,则序列化的结果会丢弃对象的 constructor

    自己根据需求实现

    1. function deepClone(obj) {
    2. let a
    3. if (Object.prototype.toString.call(obj) === '[object Object]') {
    4. a = {}
    5. for(let i in obj){
    6. a[i] = deepClone(obj[i])
    7. }
    8. } else if (Object.prototype.toString.call(obj) === '[object Array]') {
    9. a = obj.map(i => deepClone(i))
    10. }else{
    11. a = obj
    12. }
    13. return a
    14. }

    浅拷贝

    只复制引用,未复制真正值
    Object.assign方法