ES系列 | Object.assign()方法

84 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

ES系列文章

Object.assign()

Object.assign 方法用于对象的合并,将复制对象(source)的所有可枚举属性,复制到目标对象上。如下:

//目标对象
let target = {}
//复制对象
let source = {
    a:1,
    b:2
}
Object.assign(target,source)
console.log(target)
//输出{a:1 b:2} 

当目标对象与复制对象有同名属性或多个复制对象有同名属性,则后面的属性会覆盖前面的属性。如下:

let target = {
    a:5
}
let source = {
    a:1,
    b:2
}
Object.assign(target,source)
console.log(target)


let target = {
    a:{
        b:{
            c:1
        },
        e:7,
        f:8,
        g:9
    }
}
let source = {
    a:{
        b:{
            c:1
        },
        e:2,
        f:3
    }
}
Object.assign(target,source)
console.log(target)
// a: b:{c:1} e:2 f:3

总结:

Object.assign在拷贝对象的时候是有问题的。

  • 对于基本数据类型是可以直接替换的,没有问题。

  • 对于引用数据类型只把地址直接指过去了,在引用数据类型中有些属性会丢掉。 所以使用Object.assign去复制较复杂结构时并不安全。 Object.assign在拷贝对象的时候只能是浅拷贝,不能是深拷贝。

    一个前端小白,若文章有错误内容,欢迎大佬指点讨论!