在《 Angular教程》(《英雄之旅》)中,我偶然发现了两个对象之间的比较。由于这不是一种常见的做法,因此我在类中尝试了多次比较,并且所有比较都返回了false
,除非比较的是hero[0]
和selectedHero
,返回的值是{{1} },假设我们为true
分配了selectedHero
。
发生比较的Heores浏览部分代码:Link to StackBlitz
hero[0]
为什么这个比较返回true?这里到底要比较什么?我还没有找到任何解释。
答案 0 :(得分:8)
===
正在检查值(如果主题是数字或布尔值),类型和对象引用。
如果您创建两个具有相同属性的对象,如下所示,它将返回false:
let a = { test: 'test' };
let b = { test: 'test' };
console.log(a === b); // gives false
因为它不是相同的参考。
因此,在您的情况下,如果您的2个对象具有相同的引用,则selectedHero === hero
将为真。
编辑:
另一个精确度是您可以在另一个对象中复制对象引用:
let a = { test: 'test' };
let b = a;
console.log(a === b); // gives true
,然后如果您更改一个引用的属性,则两个引用都将更改:
let a = { test: 'test' };
let b = a;
a.test = 'foo';
console.log(b.test) // gives foo
答案 1 :(得分:0)
每次单击li onSelect
时,都会使用来自heroes数组中的elemnt hero来设置变量selectedHero
,英雄包含对象,因此只需将selectionHero设置为refresence即可。 elemnt(hero),当我们尝试comapre(==或===)对象时,比较是否指向相同的引用
let a = {};
let b = {};
let c = a;
console.log(a === b); // false
console.log(a === c); // true
答案 2 :(得分:0)
===在对象上检查对象的地址,而不是值。如果需要更多信息,可以查找指针的工作方式。
但是基本上,如果(hero === selectedHero)返回true,则它们指向相同的内存地址。因此,如果更改selectedHero的值,则还将更改hero [0]的值。