如何检查两个变量是否具有相同的参考?

时间:2012-12-03 14:14:41

标签: javascript

如何检查两个或多个对象/ vars是否具有相同的引用?

5 个答案:

答案 0 :(得分:64)

您使用=====

var thesame = obj1===obj2;

From the MDN :

  

如果两个操作数都是对象,则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,因为两个变量的引用现在都相同。