Object.assign(target,source1,source2,...)
該方法主要用于對象的合并,將源對象source的所有可枚舉屬性合并到目標對象target上,此方法只拷貝源對象的自身屬性,不拷貝繼承的屬性。
Object.assign方法實行的是淺拷貝弹灭,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象玫恳,那么目標對象拷貝得到的是這個對象的引用。同名屬性會替換优俘。
Object.assign只能進行值的復制京办,如果要復制的值是一個取值函數(shù),那么將求值后再復制帆焕。
Object.assign可以用來處理數(shù)組惭婿,但是會把數(shù)組視為對象。
Object.assign( {a: 4}, {b: 5, c: 6} )
// {a: 4, b: 5, c: 6}
-------------------------------------------------
1叶雹、const object1 = { a: 1, b: 2, c: 3};
2财饥、const object2 = Object.assign({c: 4, d: 5}, object1);
3、console.log(object2.c, object2.d); // 3 5
為什么這里打印出來的是 object2.c=3和object2.d=5 呢折晦?
因為 在第二步的時候钥星, 已經(jīng)是 {a: 1, b;2筋遭, c: 3, d: 5}
后面的屬性值打颤,把前面的屬性值 覆蓋了~
參數(shù):
- target: 目標對象
- sources: 源對象
描述:
如果目標對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋漓滔。后來的源的屬性將類似地覆蓋早先的屬性编饺。
Object.assign 方法只會拷貝源對象自身的并且可枚舉的屬性到目標對象。該方法使用源對象的[[Get]]和目標對象的[[Set]]响驴,所以它會調(diào)用相關(guān) getter 和 setter透且。
因此,它分配屬性豁鲤,而不僅僅是復制或定義新的屬性秽誊。如果合并源包含getter,這可能使其不適合將新屬性合并到原型中琳骡。為了將屬性定義(包括其可枚舉性)復制到原型锅论,應使用Object.getOwnPropertyDescriptor()和Object.defineProperty() 。
String類型和Symbol類型的屬性都會被拷貝楣号。
在出現(xiàn)錯誤的情況下最易,例如怒坯,如果屬性不可寫,會引發(fā)TypeError藻懒,如果在引發(fā)錯誤之前添加了任何屬性剔猿,則可以更改target對象。
注意嬉荆,Object.assign 不會跳過那些值為 [null] 或 [undefined]的源對象归敬。