如何在javascript中执行小于/大于自定义对象的比较

drd*_*cox 19 javascript

我有一个有几个成员的自定义类.我需要将它们相互比较.javascript让我写:

var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...
Run Code Online (Sandbox Code Playgroud)

但我不理解逻辑比较的行为.有人可以解释上面代码中<比较的语义吗?有没有办法控制发生的事情,以便我能做出正确的行为?我知道我可以为这个类写一个比较方法,但是因为javascript让我写它,我想知道它在做什么.

谢谢.

Esa*_*ija 29

您需要定义一个.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
Run Code Online (Sandbox Code Playgroud)

如果您没有定义它,则该字符串"[object Object]"用于比较:

"[object Object]" < "[object Object]"
false
"[object Object]" > "[object Object]"
false
"[object Object]" >= "[object Object]"
true
"[object Object]" <= "[object Object]"
true
Run Code Online (Sandbox Code Playgroud)

  • 哇,这就像 JavaScript 的 IComparable 接口。 (2认同)
  • @Jay在比较对象的相等性(`==`,`===`)时,它总是比较引用(2个操作数是否指向内存中的同一个完全对象).你需要定义像`.isEqual`这样的方法并通常调用它`a.isEqual(b)` (2认同)