1. 程式人生 > >javascript中的迴圈引用物件處理

javascript中的迴圈引用物件處理

先說明一下什麼是迴圈引用物件:
  1. var a={"name":"zzz"};
  2. var b={"name":"vvv"};
  3. a.child=b;
  4. b.parent=a;
複製程式碼 這裡的a和b都是一個迴圈引用物件。
迴圈引用物件本來沒有什麼問題,序列化的時候才會發生問題,比如呼叫JSON.stringify()對該類物件進行序列化,就會報錯: Converting circular structure to JSON.    序列化需求很常見,比如發起一個ajax請求提交一個物件就需要對物件進行序列化。
針對這種問題的一種解決方案是去除這種迴圈引用,Douglas Crockford寫了一個JSON的擴充套件包,裡面的cycle.js剛好就是用來解決此類問題。
例如:
  1. var c = JSON.decycle(a)
複製程式碼 這樣就去除了a物件的迴圈引用,如果想恢復原本的迴圈引用物件a,可以呼叫retrocycle方法
  1. var a = JSON.retrocycle(c)
複製程式碼

相關推薦

javascript迴圈引用物件處理

先說明一下什麼是迴圈引用物件: var a={"name":"zzz"}; var b={"name":"vvv"}; a.child=b; b.parent=a; 複製程式碼 這裡的a和b都是一個迴圈引用物件。迴圈引用物件本來沒有什麼問題,序列化的時候才會發生問題,比如呼叫JSON.stringif

JavaScript引用型別(JS物件)(一)

JavaScript中的所有事物都是物件。 JavaScript中的物件(引用型別): 1、Object型別(自定義物件) 2、基本包裝型別(Number型別、Boolean型別、String型別) 3、RegExp型別(正則表示式) 4、Date型別(

JavaScript引用類型

排序 情況 參數傳遞 nth inpu regex 運行 number 2個 引用類型的值是一個對象,一個引用類型相當於一個類,一個對象相當於一個實例。新對象用new操作符後跟構造函數來創造。 1.Object類型(Object類型本身不具備太多的功能,如Array這樣的引

JavaScript的Date物件在Safari與IOS 日期出錯

首先我需要的展示的時間格式是這樣的2018/03/06 下面這個是開始時間 replace(/\-/g, "/"); 轉化成我想要的格式 $scope.endtime = $stateParams.endtime.replace(/\-/g, "/"); 下面這個是結束時間&n

JavaScript的window物件 (狀態列動態文字例項)

window物件在js中經常會提到, 在具體瞭解之前經常會感覺疑惑, window到底是個啥, 這篇就是用來介紹window給和我一樣的菜鳥 Window - 瀏覽器物件模型 為什麼說瀏覽器物件呢? 因為window物件它表示瀏覽器窗口或一個框架, 與windows作業系統沒啥關係

javascript 獲取json物件的鍵構成的陣列

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">    &nb

Javascript 的Object物件

Object:物件屬於複合的資料型別,在物件中可以儲存多個不同資料型別的屬性。 物件是動態的,可以新增屬性也可以刪除屬性。 物件的常見用法: 建立、設定、查詢、刪除、檢測、列舉 物件的分類: 1.內建物件:是由ECMAScript規範定義的物件。如:陣列、函式、日期和正則表示式。 2.宿主物

javascript怎麼判斷物件{}為空

時候通過AJAX方法呼叫返回的是一個JSON物件,而這個物件可能在開發過程中會沒有資料是一個空{}。 JavaScript判斷object/json 是否為空,可以使用jQuery的isEmptyObject()方法。 function isEmptyObject(obj) {

javascript 獲取json物件的鍵構成的陣列

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title></title>     </head

javascript的window物件的知識點

javascript中的window物件的知識點 內建物件定義:可以不需要宣告和建立,可以直接使用,內建物件全部為javascript關鍵字 window是內建物件,因為window使用的太頻繁了,所以一般window可以省略不寫,我們平時用的alert()其本質就是window.ale

JavaScript 建立一個物件

在JavaScript當中建立一個物件有兩種語法, 一種是通過字面量的形式,另外一種是通過new Object()的形式 建立一個person物件 它有 name,age,sex等屬性。 1.字面量形式(literal syntax) var person =

javascript對一個物件陣列按照物件某個屬性進行排序

在javascript中,物件和陣列是兩種不同的型別,這和php中的陣列概念不同。在javascript中,也有一些精妙的演算法,用來對一些物件進行排序。我在面試迅雷的時候,也拿到一道題,當時做題的時候考慮到時間,沒有去仔細研究,回來後再讀了一些方法,就知道真正的考點在哪裡了。 我們現在有一組“學

javascript函式、物件、原型鏈等的深入自我理解

js中以物件為核心,所有皆物件。 狹義的講,js中的物件比較純粹,就是一個大括號包裹的鍵值對,鍵為名(有待深入解析,可能就是語法本身),值為物件。 這個基本要素和C++比較接近,並沒有憑空創造出新的語法來完成這個物件(類)的構造過程。 函式本身是物件,可以作為物件中的值

原生javascript的arguments物件的重要應用

在arguments中,存在函式中、第1個引數的屬性名是’0’,第2個引數的屬性名是’1’,以此類推,並且它還有length屬性,儲存的是當前傳入函式引數的個數,很多時候我們把這種物件叫做類陣列物件(偽陣列) function test (a,b,c){ console.log(a,b,c)

JavaScript引用函式、呼叫函式和回撥函式

引用函式與呼叫函式的區別 引用函式與呼叫函式的差別與函式名稱後是否附有括號()有關。函式引用只會單獨出現,但函式呼叫則必定後隨括號,很多時候還附有自變數。 舉個例子 // 函式引用 程式碼一 function f(){ var x = 5; retu

Ruby迴圈引用的檢查方法

我們知道在Ruby中要引用外部庫,有兩種方法:require和load。 他們的作用都是從外部引用一個庫到本檔案中,區別是require是僅引用一次,多次require不會重複載入檔案,且require不需要字尾,如:要引用a.rb檔案,則: rquire 'a' 而load會重複載入,load

Ruby迴圈引用導致lighttpd的ruby fcgi指令碼執行失敗(Mac OS)

在另外一篇文章中我們說到了Ruby中的迴圈引用及檢查方法,迴圈引用在Ruby解析器看來只是一個警告,但是,這個告警會直接導致專案執行失敗。 我就遇到了這個問題,被這個問題阻塞了好幾天。下面詳細看這個案例。 我有一個執行在ruby中的lighttpd程式。 lighttpd中的配置為: fastcg

node迴圈引用

如果從a中呼叫b中的資料,又從b中呼叫a中的資料,執行a程式碼,為什麼把b中的執行完後才會執行a,而不是在b呼叫a的時候a中的程式碼繼續執行 a 載入了 b 執行 b 中的程式碼 同時得到 b 中匯出的介面物件:expor

iOS Block 迴圈引用的解決

前言: 在iOS 中使用block 時 ,如果稍微不注意,則很容易 導致 迴圈引用 導致記憶體洩漏 二者都無法釋放 。出現記憶體洩漏。 #import <Foundation/Foundation.h> typedefvoid (^EOCNetworkFet

[譯]Transducers: JavaScript 高效的資料處理 Pipeline(第 18 部分)

原文地址:Transducers: Efficient Data Processing Pipelines in JavaScript 原文作者:Eric Elliott 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:Raou