如何检查两个或多个对象/变量是否具有相同的引用?
Answers:
您使用==
或===
:
var thesame = obj1===obj2;
如果两个操作数都是对象,则JavaScript将比较内部引用,当操作数引用内存中的同一对象时,内部引用是相等的。
从开始ES2015
,我们Object.is()
引入了一种新方法,可用于比较和评估两个变量/引用的相同性:
以下是一些示例:
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的处理。
可能的算法:
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;
}
==
,===
和Object.is
都将返回true。从最严格的意义上讲,原始海报希望比较返回假。我遇到了一个不可思议的情况,在那我也希望这种比较是错误的,并且找不到一个好的解决方案。我真正需要的是来自.NET的Object.referenceEquals的JS等效项