gpt4 book ai didi

javascript - 使用 equals 和 compareTo 方法在 Javascript 中比较对象

转载 作者:搜寻专家 更新时间:2023-11-01 05:30:21 25 4
gpt4 key购买 nike

我正在尝试使用 equals 和 compareTo 方法实现自定义相等和关系操作。但是,我得到了错误的结果。请帮我找出我做错的地方。

var Person = function () {
this.age = null;
this.name = null;
};

Person.prototype.equals = function (that) {
if (this.age === that.age) return true;
else return false;
};

Person.prototype.compareTo = function (that) {
return this.age - that.age;
};

var p1 = new Person();
var p2 = new Person();

p1.age = 10;
p2.age = 20;

document.writeln(p1 < p2); // this should be true but evaluates to false.

最佳答案

JavaScript 没有运算符重载,并且 >不会在您的对象上调用任何方法,所以 p1 < p2不会用你的equalscompareTo .

要进行比较,您将使用:

document.writeln(p1.compareTo(p2) < 0);

也就是说,您可以实现 valueOf并让它返回 age . valueOf 是否作为 > 的一部分被调用对象之间。

var Person = function() {
this.age = null;
this.name = null;
};

Person.prototype.valueOf = function() {
return this.age;
};

var p1 = new Person();
var p2 = new Person();

p1.age = 10;
p2.age = 20;

snippet.log("p1 < p2: " + (p1 < p2)); // true
snippet.log("p1 > p2: " + (p1 > p2)); // false
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

注意,不过,p1 == p2p1 === p2 永远是false valueOf当 JavaScript 引擎需要将对象转换为原语时调用;它不会为 == 这样做或 ===除非必须,因为另一个操作数是原语。所以你必须定义 equals并显式调用它 ( p1.equals(p2) ),或强制比较原语 ( +p1 === +p2 ),这是容易出错的。

关于javascript - 使用 equals 和 compareTo 方法在 Javascript 中比较对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31679206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com