* ng用于使用'==='进行对象比较

时间:2018-07-13 08:52:18

标签: angular typescript object comparison ngfor

在《 Angular教程》(《英雄之旅》)中,我偶然发现了两个对象之间的比较。由于这不是一种常见的做法,因此我在类中尝试了多次比较,并且所有比较都返回了false,除非比较的是hero[0]selectedHero,返回的值是{{1} },假设我们为true分配了selectedHero

发生比较的Heores浏览部分代码:Link to StackBlitz

hero[0]

为什么这个比较返回true?这里到底要比较什么?我还没有找到任何解释。

3 个答案:

答案 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]的值。