Вопрос по javascript – Как выполнить сравнения меньше / больше чем на пользовательских объектах в JavaScript

19

У меня есть пользовательский класс, который имеет несколько членов. Мне нужно сравнить их друг с другом. javascript позволяет мне писать:

var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...

но я не понимаю поведение логического сравнения. Может кто-нибудь объяснить семантику & lt; сравнение в приведенном коде? Есть ли способ контролировать то, что происходит, чтобы я мог получить правильное поведение? Я знаю, что могу написать метод сравнения для класса, но так как javascript позволяет мне писать его, я задумался над тем, что он думает.

Благодарю.

Ваш Ответ

1   ответ
27

.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
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded drdwilcox
Error: User Rate Limit Exceeded==, ===Error: User Rate Limit Exceeded.isEqualError: User Rate Limit Exceededa.isEqual(b)
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededvalueOfError: User Rate Limit Exceeded drdwilcox

Похожие вопросы