簡體   English   中英

使用 JSON.parse(JSON.stringify(obj)) 深度復制對象有什么危險?

[英]What are the dangers of Deep-copying objects using JSON.parse(JSON.stringify(obj))?

使用JSON.parse(JSON.stringify(obj))是一個老技巧,我見過很多用於深度復制對象。 它是否創建了一個對象的真正“深拷貝”? 性能方面,使用是否明智?

使用這種方法深度復制對象的最大問題是對象必須是 JSON 可序列化的。 例如,以下對象:

let obj = {
    func: function() {
        console.log("hello world!");
    }
}

不會被正確復制,因為函數不是 JSON 可序列化的。 還有許多其他問題,例如循環引用。 這實際上只適用於簡單、普通的對象,因此不是一個特別好的解決方案。 我建議檢查下划線或 lodash 之類的東西,以實現高性能深度復制。

JSON.parse(JSON.stringify(obj))存在一些問題

大多數開發人員的主要問題是丟失任何不屬於JSON 規范的內容

  • 任何內部 getter 和 setter 都將丟失。
  • 銷毀日期對象(日期將被轉換為字符串
  • 類原型將會丟失。

JSON 方法在解析循環引用時也會拋出異常。

也就是說,它確實有一些優點:

  • 基准測試中,JSON 方法的原始速度甚至勝過大多數淺拷貝方法
  • 由於瀏覽器中的本機實現與庫不同,它不需要傳送到客戶端,也可能加快頁面加載時間。

至於創建對象的真正深層副本......這將是一個真正的深層副本,因為它將盡可能多地進入對象,而不是因為它會丟棄某些信息,如概述以上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM