我有一个有几个成员的自定义类。我需要将它们相互比较。javascript让我写:
var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...
但我不明白逻辑比较的行为。有人可以解释上述代码中 < 比较的语义吗?有没有办法控制发生的事情,以便我能得到正确的行为?我知道我可以为该类编写一个比较方法,但由于 javascript 允许我编写它,我想知道它认为它在做什么。
谢谢。
我有一个有几个成员的自定义类。我需要将它们相互比较。javascript让我写:
var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...
但我不明白逻辑比较的行为。有人可以解释上述代码中 < 比较的语义吗?有没有办法控制发生的事情,以便我能得到正确的行为?我知道我可以为该类编写一个比较方法,但由于 javascript 允许我编写它,我想知道它认为它在做什么。
谢谢。
您需要定义一个.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