簡體   English   中英

如何檢查兩個變量是否具有相同的引用?

[英]How to check if two vars have the same reference?

如何檢查兩個或多個對象/變量是否具有相同的引用?

您使用=====

var thesame = obj1===obj2;

來自 MDN :

如果兩個操作數都是對象,那么當操作數引用內存中的同一對象時,JavaScript 會比較相等的內部引用。

相等和嚴格相等運算符都會告訴您兩個變量是否指向同一個對象。

foo == bar
foo === bar

對於像對象這樣的引用類型, =====運算符僅檢查其引用。

例如

let a= { text:'my text', val:'my val'}
let b= { text:'my text', val:'my val'}

這里 a==b 將是假的,因為盡管它們的內容相同,但兩個變量的引用不同。

但如果我把它改成

a=b

如果我現在檢查 a==b 那么它將是 true ,因為現在兩個變量的引用是相同的。

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

演示:

 console.log(Object.is('abc', 'abc')); console.log(Object.is(window, window)); console.log(Object.is({}, {})); const foo = { p: 1 }; const bar = { p: 1 }; const baz = foo; console.log(Object.is(foo, bar)); console.log(Object.is(foo, baz));

注意:該算法在處理有符號零和 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM