我正在尝试使用equals和compareTo方法实现自定义相等和关系操作。但是,我得到了错误的结果。请帮我弄清楚我在哪里做错了。
-(void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//Fix for bug where spinner would overlap the text
dispatch_async(dispatch_get_main_queue(), ^{
[_refreshControl beginRefreshing];
[_refreshControl endRefreshing];
});
}
答案 0 :(得分:6)
JavaScript没有运算符重载,>
不会调用对象上的任何方法,因此p1 < p2
不会使用您的equals
或compareTo
。< / p>
要进行比较,您可以使用:
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 == p2
和p1 === p2
始终为false
。当JavaScript引擎需要将对象转换为基元时,将调用valueOf
;它不会对==
或===
执行此操作,除非必须这样做,因为另一个操作数是基元。所以你必须定义equals
并明确地调用它(p1.equals(p2)
),或者强制比较在基元(+p1 === +p2
)之间,这很容易出错。