Object.assign()
阿新 • • 發佈:2017-12-03
ssi scrip true sig 語法 als 深克隆 方法 target
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
說明
Object.assign()方法將所有可枚舉屬性的值從一個或多個源對象復制到目標對象,然後返回目標對象
語法
Object.assign(target,..sources);
參數
target:目標對象
sources:源對象
返回值
target:目標對象
例子:
1.使用Object.assgin()進行淺克隆
//創建源對象 var source = {a:1}; //創建目標對象var target = {}; //使用Object.assign進行復制 var copyObj = Object.assign(target,source); console.log("copyObj:"+JSON.stringify(copyObj)); //{a:1} console.log("target===copyObj:"+(copyObj==target)); //true
從上面兩個輸出可以得到Object.assign方法的說明結論 。
1.assign進行了對象復制
2.返回對象既是目標對象
2.使用Object.assgin()+JSON進行深克隆
單純使用Object.assgin()方法復制對象我們只能復制對象中的值屬性,而對於對象中引用屬性,我們只能復制其引用
//創建源對象 var source = {a:1,b:{c:2}}; //創建目標對象 var target = {}; //使用Object.assign進行復制 var copyObj = Object.assign(target,source); console.log("copyObj:"+JSON.stringify(copyObj)); //{"a":1,"b":{"c":2}} console.log("target.b===copyObj.b:"+(source.b==copyObj.b)); //true
那麽js該怎麽實現深度克隆呢,我們可以使用JSON來實現
//創建源對象 var source = {a:1,b:{c:2}}; //創建目標對象 var target = {}; //使用Object.assign進行淺復制 var copyObj = Object.assign(target,source); //將copyObj序列成JSON字符串 var copyString = JSON.stringify(copyObj); //然後再將其JSON字符串轉換為對象,這樣深度克隆 copyObj = eval(‘(‘+copyString+‘)‘); console.log("copyObj:"+JSON.stringify(copyObj)); //{"a":1,"b":{"c":2}} console.log("source.b===copyObj.b:"+(source.b==copyObj.b)); //false
上面我們可以看出實現方式是將其轉化為JSON字符串,然後再轉成對象,就可完成深度克隆
Object.assign()