23

複数のメンバーを持つカスタム クラスがあります。それらを互いに比較する必要があります。JavaScript を使用すると、次のように記述できます。

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

しかし、論理比較の動作がわかりません。誰かが上記のコードの < 比較のセマンティクスを説明できますか? 正しい動作を得るために何が起こるかを制御する方法はありますか? クラスの比較メソッドを記述できることはわかっていますが、javascript で記述できるので、それが何をしているのか疑問に思いました。

ありがとう。

4

1 に答える 1

37

.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
于 2012-04-26T18:49:51.037 に答える