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

Pol*_*nik 2 comparison object typescript ngfor angular

通过Angular教程(英雄之旅),我偶然发现了两个对象之间的比较.由于这不是一种常见的做法,我已经在类中进行了多次比较并且都返回了false,除非比较的是hero[0]selectedHero,返回的值是true,假设我们已经分配selectedHerohero[0].

浏览Heores部分代码,进行比较:链接到StackBlitz

<ul class="heroes">
  <li *ngFor="let hero of heroes"
    [class.selected]="hero === selectedHero"
    (click)="onSelect(hero)">
    <span class="badge">{{hero.id}}</span> {{hero.name}}
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

为什么这个比较会恢复正常?究竟是什么在这里进行比较?我还没有找到任何解释.

Jul*_*ral 8

===正在检查值(如果主题是数字或布尔值),类型和对象引用.如果您创建具有相同属性的2个对象(如下所示),则将返回false:

let a = { test: 'test' };
let b = { test: 'test' };
console.log(a === b); // gives false
Run Code Online (Sandbox Code Playgroud)

因为它不是同一个参考.因此,在您的情况下,selectedHero === hero如果您的2个对象具有相同的引用,则为true.

编辑:

另一个精度是您可以在另一个中复制对象引用:

let a = { test: 'test' };
let b = a;
console.log(a === b); // gives true
Run Code Online (Sandbox Code Playgroud)

然后,如果您更改一个引用的属性,它将同时更改:

let a = { test: 'test' };
let b = a;
a.test = 'foo';
console.log(b.test) // gives foo
Run Code Online (Sandbox Code Playgroud)