• js克隆


    js克隆一个对象

     

    我们知道,对象类型在赋值的过程中其实是复制了地址,所以如果改变了一方,其他都会被改变。我们应该如何克隆一个对象,并且避免这种现象的发生呢?

    方法一:Object.assign

    function copy(obj){
        return Object.assign({}, obj);
    }

    方法二:…展开运算符

    function copy(obj){
        return { …obj };
    }
    方法一,方法二是浅拷贝,也就是当对象层级大于2层时,复制到的还是地址信息
    let a = {age:1,
             jobs: {first:'FE’} 
            }
    let b = copy(a) 
    a.jobs.first =‘native'
    console.log(b.jobs.first)// native

    方法三:JSON

    function copy(obj){
        return JSON.parse(JSON.stringify( obj ));
    }
    • 会忽略undefined,fn
    • 不能序列化函数
    • 不能解决循环引用的对象

    方法四:MessageChannel

    function structuralClone(){
        return new Promise(resolve =>{
            const {port1,port2} = new MessageChannel()
            port2.onmessage = ev => resolve(ev.data)
            port1.postMessage(obj)
        })
    }
    obj2  = await structuralClone(obj1);
    • 如果对象中有函数,会报错
    • 可以解决循环引用的对象
    • 异步 await
  • 相关阅读:
    MySQL之force index和ignore index
    Linux中CPU性能分析工具perf简单使用(亲测可用)
    Linux之SeLinux
    Docker基础
    yum常用命令
    MySQL总结
    MySQL字符集详解
    MySQL5.6的4个自带库详解
    Python操作MySQL
    MySQL索引原理
  • 原文地址:https://www.cnblogs.com/wcss/p/12258478.html
Copyright © 2020-2023  润新知