如何打字比较两个对象?
问题描述:
我有一个类叫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? 税务课我要做什么?或者我必须在税种中重写哪种方法?
答
您正在比较同一类的两个不同实例。即使实例中的值相同,它们也是两个完全独立的实体。
例如,如果我们有一个People
类与单个属性name
。即使世界上有两个人称为John Smith
,他们也是两个完全独立的人。
每个实例都有自己的唯一标识符。
如果您想检查两个税款是否具有完全相同的值,您可以逐个检查它们。
console.log(a1.getId() === a2.getId() && a1.getName() === a2.getName() && a1.getPercentage() === a2.getPercentage()) // true
有关比较对象的更多信息,可以发现here
*“它应该给真正的” *不是它不应该。只有对于相同的**对象才是真的,所以对象和它的参考。不是像你的情况那样的两个不同的物体。因为你构造了两个新对象,它们并不相同,即使它们看起来相似。 – dfsq
我的问题是**当我创建两个具有相同值的不同对象时,我必须在我的“税”类中做什么更改然后**我比较这两个对象它会给我真实的。 –
你不能做任何事情,以使'==='为两个不同的对象提供'true'。然而,你可以聪明地做到这一点,并且当Tax类不会为相同的参数构造新对象,而是返回前一个时,将Tax类转换为某种单例变体。然后'a1 === a2'将是'true'。 – dfsq