2013-08-31 5 views
1

Если я создаю объект, а затем устанавливаю другую переменную, равную этому объекту, это просто указатель на исходный объект. Есть ли способ определить, является ли переменная просто ссылкой, и если да, определите исходное имя переменной?Как определить, является ли переменная JavaScript ссылкой на другую переменную

Например, если я хочу, чтобы json закодировал объект, который имеет свойство, ссылающееся на исходный объект, создает бесконечный цикл. Я хотел бы проверить, является ли свойство ссылкой, и если да, просто отметьте его как таковой, не переписывая один и тот же объект.

+1

Вы можете сделать что-то еще, запомнить список объектов, которые вы уже закодировали, а затем проверить каждый из них перед их кодировкой. Но разве 'JSON.stringify' не заботится о том, чего вы хотите? –

+0

Связанный (если это то, что вы действительно хотели, отредактируйте свой вопрос, чтобы мы могли просто закрыть его как обман): http://stackoverflow.com/questions/7582001/is-there-a-way-to-test-circular -reference-in-javascript – ThiefMaster

+0

Меня интересовал фактический вопрос, но одним из примеров был пример. Я думаю, что ваш ответ ниже правильно решает вопрос. – juacala

ответ

7
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 
Смежные вопросы