假设我在JavaScript中有以下对象:
var a = { xxx: 33 };
var b = { xxx: 33 };
var c;
c = a;
有一个 JavaScript 测试可以告诉我是否正在处理同一对象实例吗?换句话说,它应该对 a 和 b、b 和 c 返回 false,但对 a 和 c 返回 true。
假设我在JavaScript中有以下对象:
var a = { xxx: 33 };
var b = { xxx: 33 };
var c;
c = a;
有一个 JavaScript 测试可以告诉我是否正在处理同一对象实例吗?换句话说,它应该对 a 和 b、b 和 c 返回 false,但对 a 和 c 返回 true。
你只需要这个
if(c == a) {
// same instance
}
a == b
且b == c
将返回false
只是一个标准的相等性测试:
( a == c ) // true
( a == b ) // false
我知道这个问题是关于检查两个对象是否是同一个实例的,但如果不提供以下内容,这个线程将不完整。
如果您想要检查2个对象是否相同,双等号==
就足够了。然而,对于值类型(原始类型),您可能会感到惊讶。请看以下示例:
var a = 1; // Integer 1
var b = '1' // String '1'
if (a == b) console.log('Same.');
else console.log('Not same.');
Same.
。为了避免这种情况,可以使用三个等于号===
,它的含义是两个方面:
Object.is
方法,像这样:Object.is(a, b)
。if (a === b) console.log('Same.');
else console.log('Not same.');
if (Object.is(a, b)) console.log('Same for Object.is.');
else console.log('Not same for Object.is.');
Not same.
和Not same for Object.is.
。
更多信息
下面是一些拷贝自此文章的信息:===
的习惯,因为它不会伤害你,但双等号==
确实会对您造成伤害。当您只关心值并且要比较的东西是原始类型时,可以使用双等号==
;但即使如此,也不建议这样做,因为这主要意味着设计上的缺陷。像TypeScript这样的语言甚至会避免这种情况,即比较一个'1'和1而不明确说明。