1
如果我創建一個對象,然後將另一個變量設置爲等於該對象,則它只是一個指向原始對象的指針。有沒有辦法判斷一個變量是否只是一個引用,如果是的話,確定原始變量名稱?如何判斷一個JavaScript變量是否是對另一個變量的引用
例如,如果我想對json編碼一個具有引用回原始對象的屬性的對象,它會創建一個無限循環。我想測試一個屬性是否是一個引用,如果是這樣,只需將它標記爲這樣,而不用重寫同一個對象。
如果我創建一個對象,然後將另一個變量設置爲等於該對象,則它只是一個指向原始對象的指針。有沒有辦法判斷一個變量是否只是一個引用,如果是的話,確定原始變量名稱?如何判斷一個JavaScript變量是否是對另一個變量的引用
例如,如果我想對json編碼一個具有引用回原始對象的屬性的對象,它會創建一個無限循環。我想測試一個屬性是否是一個引用,如果是這樣,只需將它標記爲這樣,而不用重寫同一個對象。
var foo = {'some': 'object'};
var bar = foo;
在此之後,foo
和bar
是完全相同如「它們都指向同一個對象」。但除此之外,foo
和bar
之間沒有關係,因此bar
不是對foo
的引用,而是對同一個對象。所以答案是「否」,因爲JavaScript沒有引用其他變量。
然而,檢查循環依賴 - 這是你真正需要/想在你的例子 - 有各種其他更合適,解決方案提供了這個問題:Is there a way to test circular reference in JavaScript?
此外,原生JSON編碼使用JSON.stringify()
已經檢查此:
>>> var obj = {};
>>> obj.x = obj;
>>> JSON.stringify(foo)
TypeError: cyclic object value
你可以做別的事情,記住你已經編碼的對象列表,然後檢查每個對象,然後再編碼它們。 但是'JSON.stringify'沒有照顧你想要的東西嗎? –
相關(如果這是你真正想要的,請編輯你的問題,所以我們可以簡單地關閉它作爲一個愚蠢):http://stackoverflow.com/questions/7582001/is-there-a-way-to-test-circular -reference-in-javascript – ThiefMaster
我對實際問題感興趣,但有一個應用程序就是例子。我認爲你的答案正確地解決了這個問題。 – juacala