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

How to tell if a JavaScript variable is a reference to another variable

本文关键字:变量 是否是 另一个 引用 JavaScript 何判断 判断 一个      更新时间:2023-09-26

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

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

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

在此之后,foobar与"它们都指向同一对象"中的完全相同。但除此之外,foobar之间没有关系,因此bar不是对foo的引用,而是对同一对象的引用。因此,答案是"否",因为JavaScript没有对其他变量的引用。

然而,为了检查循环依赖性(这正是您在示例中实际需要/想要的),还有其他各种更合适的解决方案可供选择:有没有一种方法可以测试JavaScript中的循环引用?

此外,使用JSON.stringify()的本地JSON编码已经检查了以下内容:

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