国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js深度克隆的幾種方法

Pluser / 2479人閱讀

摘要:方法一老老實實敲代碼法迭代法,適用于所有方法二利用將對象序列化字符串,再使用來反序列化還原對象缺點如果里面有時間對象,則后再的結果,時間將只是字符串的形式。簡而言之,第一層實現了深度拷貝,后續層次還是淺拷貝

方法一
老老實實敲代碼法(迭代法,適用于所有)
function deepClone(obj) {
    let newObj = Array.isArray(obj) ? [] : {}
    if (obj && typeof obj === "object") {
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = (obj && typeof obj[key] === "object") ? deepClone(obj[key]) : obj[key];
            }
        }
    } 
    return newObj
}
const newObj = deepClone(oldObj));
方法二
利用JSON.stringify 將js對象序列化(JSON字符串),再使用JSON.parse來反序列化(還原)js對象
const newObj = JSON.parse(JSON.stringify(oldObj));

缺點:

如果obj里面有時間對象,則JSON.stringify后再JSON.parse的結果,時間將只是字符串的形式。而不是時間對象;

如果obj里有RegExp、Error對象,則序列化的結果將只得到空對象;

如果obj里有function,Symbol 類型,undefined,則序列化的結果會把函數或 undefined丟失;

如果obj里有NaN、Infinity和-Infinity,則序列化的結果會變成null?

JSON.stringify()只能序列化對象的可枚舉的自有屬性,例如 如果obj中的對象是有構造函數生成的, 則使用JSON.parse(JSON.stringify(obj))深拷貝后,會丟棄對象的constructor;

方法三
const newObj = Object.assign([],oldObj);

缺點

Object.assign只對頂層屬性做了賦值,完全沒有繼續做遞歸之類的把所有下一層的屬性做深拷貝。

簡而言之,第一層實現了深度拷貝,后續層次還是淺拷貝

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106076.html

相關文章

  • js對象詳解(JavaScript對象深度剖析,深度理解js對象)

    摘要:對象詳解對象深度剖析,深度理解對象這算是醞釀很久的一篇文章了。用空構造函數設置類名每個對象都共享相同屬性每個對象共享一個方法版本,省內存。 js對象詳解(JavaScript對象深度剖析,深度理解js對象) 這算是醞釀很久的一篇文章了。 JavaScript作為一個基于對象(沒有類的概念)的語言,從入門到精通到放棄一直會被對象這個問題圍繞。 平時發的文章基本都是開發中遇到的問題和對...

    CatalpaFlat 評論0 收藏0
  • javascript設計模式與開發實踐(二)- 封裝和原型模式

    摘要:對象會記住它的原型給對象提供了一個名為的隱藏屬性,某個對象的屬性默認會指向它的構造器的原型對象,即。我們通過代碼來驗證再來實際上,就是對象跟對象構造器的原型聯系起來的紐帶切記這句話,對未來理解原型鏈很有幫助。 封裝 封裝數據 在許多語言的對象系統中,封裝數據是由語法解析來實現的,這些語言也許提供了 private、public、protected 等關鍵字來提供不同的訪問權限。例如:j...

    luxixing 評論0 收藏0
  • 【前端芝士樹】淺拷貝、深拷貝以及Object.assign()的作用、克隆對象、復制數組

    摘要:前端芝士樹淺拷貝深拷貝以及的作用首先還是得回到的基本數據類型。值類型深拷貝數值布爾值字符串。它接受任意數量的源對象,主要作用就是枚舉它們的所有屬性并分配給。 【前端芝士樹】淺拷貝、深拷貝以及Object.assign()的作用 首先還是得回到Javascript的基本數據類型。 值類型[深拷貝]:數值Num、布爾值Boolean、字符串String、null、undefined。 基本...

    ccj659 評論0 收藏0
  • 【轉】JavaScript 對象的深度克隆

    摘要:在聊以下簡稱深度克隆之前,我們先來了解一下中對象的組成??寺』蛘呖截惙譃榉N淺度克隆深度克隆。淺度克隆基本類型為值傳遞,對象仍為引用傳遞。 該文轉載自http://www.cnblogs.com/zichi/p/4568150.html,有部分修改。 在聊JavaScript(以下簡稱js)深度克隆之前,我們先來了解一下js中對象的組成。在 js 中一切實例皆是對象,具體分為 原始類型 ...

    JowayYoung 評論0 收藏0
  • 如何深度克隆一個對象

    摘要:如何深度克隆一個對象在我們日常工作中經常會遇到需要去克隆一個對象比如多個地方用到的公共的圖表基本參數的配置相信很多人會想到用和方法去克隆一個對象,這個可以明確告訴大家這些都是些不靠譜的淺度克隆。 如何深度克隆一個對象 在我們日常工作中經常會遇到需要去克隆一個對象比如多個地方用到的公共的圖表基本參數的配置 相信很多人會想到用 Object.assign, JSON.stringify 和...

    TIGERB 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<