Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中对自定义对象执行小于/大于比较_Javascript - Fatal编程技术网

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

如何在javascript中对自定义对象执行小于/大于比较,javascript,Javascript,我有一个自定义类,它有几个成员。我需要把它们相互比较一下。javascript让我写: var a = new MyType(1); var b = new MyType(2); if (a < b) { ... var a=新的MyType(1); var b=新的MyType(2); 如果(a

我有一个自定义类,它有几个成员。我需要把它们相互比较一下。javascript让我写:

var a = new MyType(1);
var b = new MyType(2);
if (a < b) { ...
var a=新的MyType(1);
var b=新的MyType(2);
如果(a
但是我不理解逻辑比较的行为。有人能在上面的代码中解释<比较的语义吗?有没有办法控制发生了什么,这样我就可以得到正确的行为?我知道我可以为类编写一个比较方法,但是由于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]"
false
"[object Object]" > "[object Object]"
false
"[object Object]" >= "[object Object]"
true
"[object Object]" <= "[object Object]"
true

哇,这就像JavaScript的IComparable接口。@Jay在比较对象是否相等(
==
===
)时,它总是比较引用(无论两个操作数是否指向内存中的同一个精确对象)。您需要定义类似
.isEqual
的方法,并正常调用它
a.isEqual(b)
谢谢。那太好了。但是,它不能使==或===工作,这让我很沮丧。奇怪的是,我在网上的任何地方都找不到这个解决方案。@drdwilcox:它在JavaScript中已经存在了很长时间了(我想从1996年的1.1版开始)但奇怪的是,这似乎是未知的。我不得不同意未知的部分。我一直在编写javascript,甚至教给未来的网页设计师几年,但从来没有发现过。正如我所说,谷歌搜索结果完全是空的。我肯定谷歌搜索
valueOf
会找到它,但这假设我知道我的答案。