如何检查两个或多个对象/ vars是否具有相同的引用?
答案 0 :(得分:64)
您使用==
或===
:
var thesame = obj1===obj2;
如果两个操作数都是对象,则JavaScript比较内部 当操作数引用同一个对象时,引用是相等的 存储器中。
答案 1 :(得分:15)
相等和严格相等运算符都会告诉您两个变量是否指向同一个对象。
foo == bar
foo === bar
答案 2 :(得分:3)
可能的算法:
Object.prototype.equals = function(x)
{
var p;
for(p in this) {
if(typeof(x[p])=='undefined') {return false;}
}
for(p in this) {
if (this[p]) {
switch(typeof(this[p])) {
case 'object':
if (!this[p].equals(x[p])) { return false; } break;
case 'function':
if (typeof(x[p])=='undefined' ||
(p != 'equals' && this[p].toString() != x[p].toString()))
return false;
break;
default:
if (this[p] != x[p]) { return false; }
}
} else {
if (x[p])
return false;
}
}
for(p in x) {
if(typeof(this[p])=='undefined') {return false;}
}
return true;
}
答案 3 :(得分:3)
从D:\Unity\TEST Game\test project
开始,引入了一种新方法Object.is()
,该方法可用于比较和评估两个变量/引用的相同性:
以下是一些示例:
ES2015
演示:
Object.is('abc', 'abc'); // true
Object.is(window, window); // true
Object.is({}, {}); // false
const foo = { p: 1 };
const bar = { p: 1 };
const baz = foo;
Object.is(foo, bar); // false
Object.is(foo, baz); // true
注意: 该算法在处理带符号的零和NaN方面不同于严格相等比较算法。
答案 4 :(得分:0)
对于像对象这样的引用类型, == 或 === 操作员仅检查其引用。
例如
let a= { text:'my text', val:'my val'}
let b= { text:'my text', val:'my val'}
此处a == b为假,因为尽管两个变量的内容相同,但它们的引用不同。
但是如果我将其更改为
a=b
如果我现在检查a == b,那么它将为true,因为两个变量的引用现在都相同。