Object.assign()
是 JavaScript 中的一个内建方法,用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
文末有我帮助400多位同学成功领取到前端offer的场景题哦
作用:
- 合并对象:你可以使用
Object.assign()
来合并两个或多个对象。如果目标对象和目标源对象有同名属性,或多个源对象有同名属性,则后面的源对象的属性将覆盖前面的属性。 - 克隆对象:虽然
Object.assign()
主要用于合并对象,但它也可以用来克隆对象(浅克隆)。但需要注意的是,如果源对象的属性值是引用类型(如数组或另一个对象),那么它只会拷贝引用,而不是真正的值。
用法:
Object.assign(target, ...sources)
target
:目标对象。...sources
:一个或多个源对象。
示例:
合并对象
let obj1 = { a: 1 };
let obj2 = { b: 2 };
let obj3 = { c: 3 };
let result = Object.assign(obj1, obj2, obj3);
console.log(result); // { a: 1, b: 2, c: 3 }
console.log(obj1); // 注意:obj1 也被改变了,因为 target 是 obj1
// { a: 1, b: 2, c: 3 }
克隆对象(浅克隆)
let obj = { a: 1, b: { c: 2 } };
let clone = Object.assign({}, obj);
console.log(clone); // { a: 1, b: { c: 2 } }
console.log(clone.b === obj.b); // true,因为是浅克隆,所以 b 的属性仍然引用同一个对象
注意事项:
- 如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的源对象的属性将覆盖前面的属性。
Object.assign()
是浅拷贝,如果源对象的属性值是一个指向对象的引用,它只拷贝那个引用值,而不是对象本身。Object.assign()
不会拷贝继承属性和不可枚举的属性(enumerable: false
)。Object.assign()
会跳过null
和undefined
源对象,但不会报错。- 如果不是所有的源对象都是对象,那么
Object.assign()
在遇到非对象参数之前会拷贝之前的对象参数。如果任一源参数是null
或undefined
,那么它们会被忽略,例如,Object.assign({}, undefined)
将只会返回{}
。 - 堪称2024最强的前端面试场景题,让421人成功拿到offer