javascript - node.js - 比较两个变量是否在javascript中引用同一个对象

我正在寻找一个方法来检查两个变量是否引用了javascript中的同一个对象。

比如:


var a = {foo:"bar"};


var b = {foo:"bar"};


var aa = a;



testSame(a, b);//false


testSame(a, aa);//true



var r ="a string";


var s ="a string";


var rr = r;



testSame(r, s);//false


testSame(r, rr);//true



到目前为止,似乎还没有一种方法来完成这项工作。

testSame() 不是一个真正的函数,它将是假想的解决方案。

时间:

只与 ===== 进行比较就可以了,但字符串除外。 不可能用字符串来做你想做的事。


var a = {foo:"bar"};


var b = {foo:"bar"};


var aa = a;



testSame(a, b);//false


testSame(a, aa);//true



var r ="a string";


var s ="a string";


var rr = r;



testSame(r, s);//false <-- this will be true


testSame(r, rr);//true



function testSame(a, b) {


 console.log(a === b);


}

== 或 === 可以在简短的控制台测试中为你做到这一点:


let a ="string1"


let b ="string2"



a == b//false



let c = a



c == a//true



在比较之前 === 将进行转换,因此你希望使用它;

仍然不明白问题的关键,但只是对象:


let a = {}


let b = {}



a == b//false


let c = a



a == c//true


c == b//false



这就是事情的运作方式。首先,在这段代码中:


var a = {foo:"bar"};


var b = {foo:"bar"};



变量 ab 使用对两个不同对象的引用初始化。 因此,与 =====的比较将报告它们是不同的( 例如,不等于) 。

然而,在这里:


var a ="some string";


var b ="some string";



这两个变量被初始化为引用相同的字符串。 JavaScript中的字符串值不是对象—它们是基元。 由于字符串是相同的,所以 ab===== 之间的比较将因此返回 true 。 这与变量初始化时的情况完全相同:


var a = 17;


var b = 17;



数字和字符串是基元,因此比较比较基元的语义值。 但是,对象不是基元,对象比较是基于对象标识的。

...