小tips:使用JSON.parse(JSON.stringify(object))实现深拷贝的局限及扩展

前端开发 作者: 2024-08-20 18:15:01
使用JSON.parse(JSON.stringify(object))实现深拷贝局限 大部分情况我们都可以使用JSON.parse(JSON.stringify(object))来实现深拷贝,但该方
  • 会忽略 undefined
  • 会忽略 symbol
  • 不能序列化函数
  • 不能解决循环引用的对象
let a = {
  age: undefined,sex: Symbol('male'),jobs: function() {},name: 'yck'
}
let b = JSON.parse(JSON.stringify(a))
console.log(b) // {name: "yck"}
var channel = new MessageChannel();
channel.port1
channel.port2
new MessageChannel();
var port1 = channel.port1;
var port2 = channel.port2;
port1.onmessage = (event) {
    console.log("port1收到来自port2的数据:" + event.data);
}
port2.onmessage = (event) {
    console.log("port2收到来自port1的数据:" + event.data);
}

port1.postMessage("发送给port2");
port2.postMessage("发送给port1");
 deepClone(val) {
    return new Promise((resolve,reject) => {
        const {port1,port2} =  MessageChannel();
        port2.onmessage = e => resolve(e.data);
        port1.postMessage(val);
    })
}

let obj =,c: {
      d: true
  }
}
obj.c.e = obj.c;  循环引用

 注意该方法是异步
async  test() {
    const clone = await deepClone(obj);
    console.log(clone)  {age: undefined,name: "yck",c: {…}}
}
test()
var extendCopy = ( f(p,c){
    var c = c || {};
    for (var i in p) {
        if(typeof p[i] === 'object'){
            c[i] = (p[i] instanceof Array) ? [] : {};
            f(p[i],c[i]);
        }else{
             c[i] = p[i];
        } 
    }
    return c;
});
_.cloneDeep(value)
var objects = [{ 'a': 1 },{ 'b': 2 }];
 
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
 => false
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_65652.html