如何判断JavaScript变量是否是对另一个变量的引用

时间:2013-08-31 17:11:33

标签: javascript

如果我创建一个对象,然后设置另一个等于该对象的变量,它只是一个指向原始对象的指针。有没有办法判断变量是否只是一个引用,如果是,确定原始变量名称?

例如,如果我想json编码一个具有引用回原始对象的属性的对象,它会创建一个无限循环。我想测试一个属性是否是一个引用,如果是这样,只需将其标记为这样,而不重写同一个对象。

1 个答案:

答案 0 :(得分:7)

var foo = {'some': 'object'};
var bar = foo;

在此之后,foobar 完全相同,就像“它们都指向同一个对象”一样。但除此之外,foobar之间没有任何关系,因此bar不是对foo的引用,而是对同一对象的引用。所以答案是“不”,因为JavaScript没有引用其他变量。

但是,要检查循环依赖关系 - 这是您在示例中实际需要/想要的东西 - 此问题还有其他各种更合适的解决方案:Is there a way to test circular reference in JavaScript?

此外,使用JSON.stringify()的原生JSON编码已经检查过:

>>> var obj = {};
>>> obj.x = obj;
>>> JSON.stringify(foo)
TypeError: cyclic object value