js關於物件直接量的拷貝簡單介紹
本章節介紹一下關於物件直接量拷貝相關的一些問題。
可能很多朋友認為這個操作實在是太簡單了,看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", innerObj:{ url:"softwhy.com" } } var newObj=new Object(); for(var prop in obj){ newObj[prop]=obj[prop]; } console.log(newObj.webName);
上面的程式碼貌似很完美的實現拷貝複製效果,其實並非如此,看如下程式碼:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", innerObj:{ url:"softwhy.com" } } var newObj=new Object(); for(var prop in obj){ newObj[prop]=obj[prop]; } obj.innerObj.url="螞蟻部落網址"; console.log(newObj.innerObj.url);
從上面的程式碼可以看出並沒有實現真正的拷貝效果,通過obj物件修改屬性的相關值,在所謂的拷貝物件中也會被修改。
這是因為在上面的物件拷貝中,如果屬性值是一個引用型別的,那麼新拷貝中的相關屬性的賦值只是那個引用型別資料的地址,所以這並不是真正的拷貝。下面來看一下如何實現真正的拷貝,程式碼如下:
[JavaScript] 純文字檢視 複製程式碼var obj={ webName:"螞蟻部落", innerObj:{ url:"softwhy.com" } } function cloneObj(oldObj){ if (typeof(oldObj) != 'object') return oldObj; if (oldObj == null) return oldObj; var newObj = new Object(); for (var prop in oldObj){ newObj[prop] = cloneObj(oldObj[prop]); } return newObj; }; var newObj=cloneObj(obj); obj.innerObj.url="螞蟻部落網址"; console.log(newObj.innerObj.url);
上面的程式碼實現了物件直接量的真正拷貝效果,下面介紹一下它的實現過程。
程式碼註釋:
1.function cloneObj(oldObj){},此函式實現了真正的拷貝效果,引數是待拷貝的物件。
2.if (typeof(oldObj) != 'object') return oldObj,判斷引數是不是一個物件,如果不是,則直接返回此值。
3.if (oldObj == null) return oldObj,如果引數是null,那麼也直接返回null。
4.var newObj = new Object(),建立一個新的物件,這個物件就是拷貝物件。
5.for (var prop in oldObj){
newObj[prop] = cloneObj(oldObj[prop]);
},通過for in語句遍歷物件。
newObj[prop] = cloneObj(oldObj[prop]),這段程式碼是核心部分,如果原來物件的屬性值是值型別的,那麼直接返回此值,但是如果是引用型別的,那麼就採用遞迴的方式繼續呼叫cloneObj()方法進行相關拷貝操作。
6.return newObj,返回拷貝的新物件。
相關文章
- 關於引用物件拷貝物件
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- JSON物件簡單介紹JSON物件
- 龍叔python-直接賦值,深拷貝,淺拷貝的簡單解析Python賦值
- 關於javascript的深拷貝淺拷貝 思考JavaScript
- 關於什麼是jsonp概念簡單介紹JSON
- 關於 React Hooks 的簡單介紹ReactHook
- java關於事件的簡單介紹Java事件
- json字串與json物件簡單介紹JSON字串物件
- javaScript深拷貝和淺拷貝簡單梳理JavaScript
- 物件的深拷貝與淺拷貝物件
- js物件的屬性的運用簡單介紹JS物件
- 關於C語言的簡單介紹C語言
- 關於js中的深淺拷貝和assign到底是深拷貝還是淺拷貝的爭論JS
- javascript物件簡單介紹JavaScript物件
- 物件深拷貝和淺拷貝物件
- 【JavaScript】物件的淺拷貝與深拷貝JavaScript物件
- PHP 物件導向 - 物件的淺拷貝與深拷貝PHP物件
- js物件實現深淺拷貝!!JS物件
- js的深拷貝和淺拷貝JS
- python深拷貝和淺拷貝之簡單分析Python
- javascript物件導向程式設計關於封裝簡單介紹JavaScript物件程式設計封裝
- vue物件的拷貝Vue物件
- js陣列物件複製拷貝不改變原來的值,深拷貝JS陣列物件
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- JavaScript物件的深拷貝以及淺拷貝分析JavaScript物件
- 實現物件淺拷貝、深拷貝物件
- 聊聊物件深拷貝和淺拷貝物件
- 關於PHP檔案操作的簡單介紹PHP
- 詳解js中物件的深淺拷貝JS物件
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- javascript建立物件簡單介紹JavaScript物件
- 物件拷貝方式物件
- Java拷貝物件Java物件
- JAVA 物件拷貝Java物件
- JS深拷貝與淺拷貝JS
- js 淺拷貝和深拷貝JS
- js 深拷貝和淺拷貝JS