Object.assign({},object)與深淺拷貝
阿新 • • 發佈:2021-11-04
0.起因
學習前輩的程式碼,發現有個地方用到了Object.assign這個我之前沒見過的東西,就看了看具體是個什麼東西,發現它在物件拷貝方面挺666的,故做記錄。
1.用法
Object.assign(生成物件,拷貝物件)
該方法用於將所有自有的可列舉的屬性的值從一個或多個源物件複製到目標物件,並返回目標物件。
以兩個不同的拷貝方式舉例子
let object = { oil: "-", produce: "-", net: "-", hot: "-", CO2: "-", }; let object2 = Object.assign({}, object); console.log("Before///object2: ", object2); let equalObject2 = object; console.log("equalObject", equalObject2); object.oil = "ooooooChange"; console.log("After///object2: ", object2); console.log("equalObject", equalObject2);
結果如下
2.思考
Object.assign()方法複製的是源物件的屬性值,如果源物件的屬性是指向另一個物件的引用,那麼它只會複製這個引用值(淺複製),不會深複製這個引用值所引用的物件。
使用Object.assign生成的object2是淺拷貝,拿過來是什麼就是什麼,拷貝的object改變也不會影響它的值。
直接用等號的就是深拷貝,object改變也會影響equalObject的改變。