Как выполнять меньше или больше сравнений на пользовательских объектах в javascript
У меня есть пользовательский класс с несколькими членами. Мне нужно сравнить их друг с другом. javascript позволяет мне писать:
var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...
но я не понимаю поведения логического сравнения. Может ли кто-нибудь объяснить семантику < сравнение в приведенном выше коде? Есть ли способ контролировать то, что происходит, чтобы я мог получить правильное поведение? Я знаю, что могу написать метод сравнения для класса, но поскольку javascript позволяет мне писать его, я задавался вопросом, что он думал об этом.
Спасибо.
Ответы
Ответ 1
Вам нужно определить метод .valueOf
, который возвращает примитив, который можно использовать для сравнения:
function MyType( value ){
this.value = value;
}
MyType.prototype.valueOf = function() {
return this.value;
};
var a = new MyType(3),
b = new MyType(5);
a < b
true
a > b
false
a >= b
false
b < a
false
b > a
true
Если вы не определяете его, для сравнения используется строка "[object Object]"
:
"[object Object]" < "[object Object]"
false
"[object Object]" > "[object Object]"
false
"[object Object]" >= "[object Object]"
true
"[object Object]" <= "[object Object]"
true