如何打字比较两个对象?

问题描述:

我有一个类叫tax如何打字比较两个对象?

export class tax { 
     private _id: string; 
     private _name: string; 
     private _percentage: number;` 

     constructor(id: string = "", taxName: string = "", percentage: number = 0) { 
      this._id = id; 
      this._name = taxName; 
      this._percentage = percentage; 
     } 


     public get id(): string { 
      return this._id; 
     } 

     public set id(v: string) { 
      this._id = v; 
     } 
     public get name(): string { 
      return this._name; 
     } 

     public set name(v: string) { 
      this._name = v; 
     } 
     public get percentage(): number { 
      return this._percentage; 
     } 

     public set percentage(v: number) { 
      this._percentage = v; 
     } 

     toString(){ 
      return this.id; 
     } 
    } 

当我创建这个类

a1: tax = new tax("id","name",4); 
    a2: tax = new tax("id","name",4); 

    console.log(a1 === a2); //false 
    console.log(a1 == a2); //false 

的2个不同的对象当我给A1 A2 ===应该给予正确的。 什么变化我必须在我的班,所以它会给a1 === a2? 税务课我要做什么?或者我必须在税种中重写哪种方法?

+0

*“它应该给真正的” *不是它不应该。只有对于相同的**对象才是真的,所以对象和它的参考。不是像你的情况那样的两个不同的物体。因为你构造了两个新对象,它们并不相同,即使它们看起来相似。 – dfsq

+0

我的问题是**当我创建两个具有相同值的不同对象时,我必须在我的“税”类中做什么更改然后**我比较这两个对象它会给我真实的。 –

+0

你不能做任何事情,以使'==='为两个不同的对象提供'true'。然而,你可以聪明地做到这一点,并且当Tax类不会为相同的参数构造新对象,而是返回前一个时,将Tax类转换为某种单例变体。然后'a1 === a2'将是'true'。 – dfsq

您正在比较同一类的两个不同实例。即使实例中的值相同,它们也是两个完全独立的实体。

例如,如果我们有一个People类与单个属性name。即使世界上有两个人称为John Smith,他们也是两个完全独立的人。

每个实例都有自己的唯一标识符。

如果您想检查两个税款是否具有完全相同的值,您可以逐个检查它们。

console.log(a1.getId() === a2.getId() && a1.getName() === a2.getName() && a1.getPercentage() === a2.getPercentage()) // true 

有关比较对象的更多信息,可以发现here