[英]How to check if two vars have the same reference?
如何檢查兩個或多個對象/變量是否具有相同的引用?
您使用==
或===
:
var thesame = obj1===obj2;
如果兩個操作數都是對象,那么當操作數引用內存中的同一對象時,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.