摘要:對各種數據類型進行復制,最初的思想是利用判別數據類型后利用語句分別賦值,但是有個問題和返回的都是,所以又要細分為三種情況編寫代碼。其中,要判斷一個對象為數組使用的是方法。
對各種數據類型進行復制,最初的思想是利用typeof判別數據類型后利用switch語句分別賦值,但是有個問題:null、Array和Object返回的都是‘object’,所以又要細分為三種情況編寫代碼。其中,要判斷一個對象為數組使用的是:toString.apply(obj)方法。完整代碼如下:
function clone(obj){ var copy; switch(typeof obj){ case "undefined":break; case "number": case "string": case "boolean":copy = obj;break; case "object": if(obj == null) copy = null; else if(toString.apply(obj) === "[object Array]") { copy = []; for(var i in obj) copy.push(clone(obj[i])); } else { copy = {}; for(var j in obj) copy[j]= clone(obj[j]); } } return copy; } console.log(clone(true)); console.log(clone(12)); console.log(clone("abc")); console.log(clone(null)); console.log(clone([1,2,3])); console.log(clone({name:"zh",age:"18"}));
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91036.html
摘要:引用類型之所以會出現深淺拷貝的問題,實質上是由于對基本類型和引用類型的處理不同。另外方法可以視為數組對象的淺拷貝。上面描述過的復雜問題依然存在,可以說是最簡陋但是日常工作夠用的深拷貝方式。 一直想梳理下工作中經常會用到的深拷貝的內容,然而遍覽了許多的文章,卻發現對深拷貝并沒有一個通用的完美實現方式。因為對深拷貝的定義不同,實現時的edge case過多,在深拷貝的時候會出現循環引用等問...
摘要:的不能算作深復制,但它至少比直接賦值來得深一些,它創建了一個新的對象。它們的主要用途是對存在環的對象進行深復制。比如源對象中的子對象在深復制以后,對應于。希望這篇文章對你們有幫助深復制方法所謂擁抱未來的深復制實現參考資料 本文最初發布于我的個人博客:咀嚼之味 一年前我曾寫過一篇 Javascript 中的一種深復制實現,當時寫這篇文章的時候還比較稚嫩,有很多地方沒有考慮仔細。...
摘要:通常有這兩種繼承方式接口繼承和實現繼承。理解繼承的工作是通過調用函數實現的,所以是寄生,將繼承工作寄托給別人做,自己只是做增強工作。適用基于某個對象或某些信息來創建對象,而不考慮自定義類型和構造函數。 一、繼承的概念 繼承,是面向對象語言的一個重要概念。通常有這兩種繼承方式:接口繼承和實現繼承。接口繼承只繼承方法簽名,而實現繼承則繼承實際的方法。 《JS高程》里提到:由于函數沒有簽名,...
摘要:基本數據類型的復制很簡單,就是賦值操作,所以深淺拷貝也是針對,這類引用類型數據。它會拋棄對象的。另外,查資料過程中還看到這么一個詞結構化克隆算法還有這一篇資料也有參考,也寫得比較詳細了的深淺拷貝 基本數據類型的復制很簡單,就是賦值操作,所以深淺拷貝也是針對Object,Array這類引用類型數據。 淺拷貝對于字符串來說,是值的復制,而對于對象來說則是對對象地址的復制;而深拷貝的話,它不...
摘要:更好的方案模板分離原則模板分離原則將定義模板的那一部分,與的代碼邏輯分離開來,讓代碼更加優雅且利于維護。 showImg(https://segmentfault.com/img/bVJ73t?w=800&h=316); 引言 在前端開發中,經常需要動態添加一些元素到頁面上。那么如何通過一些技巧,優化動態創建頁面元素的方式,使得代碼更加優雅,并且更易于維護呢?接下來我們通過研究一些實例...
閱讀 1884·2021-11-17 09:33
閱讀 6470·2021-10-12 10:20
閱讀 2299·2021-09-22 15:50
閱讀 1783·2021-09-22 15:10
閱讀 615·2021-09-10 10:51
閱讀 618·2021-09-10 10:50
閱讀 3020·2021-08-11 11:19
閱讀 1776·2019-08-30 15:55