【发布时间】:2017-09-23 20:29:53
【问题描述】:
我有一门课叫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;
}
}
当我创建这个类的 2 个不同对象时
a1: tax = new tax("id","name",4);
a2: tax = new tax("id","name",4);
console.log(a1 === a2); //false
console.log(a1 == a2); //false
当我给 a1 === a2 它应该给真。 我必须在课堂上做什么改变,这样它才能给出 a1 === a2 ? 我必须在税课上做什么?或者我必须在税类中覆盖哪种方法?
【问题讨论】:
-
“它应该给出真实的” 不是它不应该。它只适用于 same 对象,因此对象及其引用。不适用于您的情况下的两个不同对象。因为您构造了两个新对象,所以它们并不相同,即使它们看起来很相似。
-
我的问题是**当我创建两个具有相同值的不同对象时,我必须在
tax类中做哪些更改然后**我比较这两个对象它会给我真实的。 -
你不能做任何事情,所以
===给你true两个不同的对象。但是,当 Tax 类不会为相同的参数构造新对象但返回前一个对象时,您可以聪明地做它并将其转换为某种 Singleton 变体。那么a1 === a2将是true。 -
如果你对使用 lodash 没问题,它提供了一种在对象之间进行深度比较的方法。只需与 _.isEqual(a1, a2) 进行比较。文档可以在这里找到:lodash.com/docs/4.17.5#isEqual
-
这里要记住的是,您正在检查引用(内存位置)的相等性,但您想要进行值比较。
标签: javascript typescript