JavaScriptでオブジェクトを比較する方法を定義するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/441144

  •  22-07-2019
  •  | 
  •  

質問

JavaScriptクラスFooを定義したい。

Foo = function(value){
    this.value = value;
};

「インスタンス」を作成します;私のFoo:

foo1 = new Foo(1);
foo2 = new Foo(1);

そして、Fooのインスタンスが、標準==等号演算子を使用して互いに比較できるようにしたい:

foo1 == foo2;      // this should be true

これを行う方法が見つかりません。 valueOf()関数を使用して何かに取り組んでいると思いましたが、これは比較の片側がプリミティブである場合にのみ役立ちます。

Rubyのような非常にシンプルなものを見逃した

def ==(obj); end
役に立ちましたか?

解決

JavaScriptには演算子のオーバーロードがありません。質問については、このディスカッションをご覧ください。

他のヒント

クリーンな方法ではありません...

Foo = function (value){
    this.value = value;
};

独自のオブジェクトのtoString関数をオーバーライドします:

Foo.prototype.toString = function( ){ return this.value.toString(); }

2つのテストオブジェクトの作成:

foo1 = new Foo(1);
foo2 = new Foo(1);

オブジェクトの値が文字列または数値の場合、javascriptエンジンを使用して、オブジェクトを空の文字列に追加して文字列に変換できます。

alert( ""+foo1 === ""+foo2 ); //Works for strings and numbers

同じことですがクリーナー:

alert( foo1.toString() === foo2.toString() ); //Works for strings and numbers

オブジェクトの値が数値のみの場合、単項+演算子を使用してオブジェクトを数値に変換できます:

alert( +foo1 === +foo2 ); //Works for numbers

ただし、toStringを上記のように定義することと、次のように等しいことの両方を定義することをお勧めします。

Foo.prototype.equals=function(b){return this.toString() === b.toString();}

そして次のように呼び出します:

alert ( foo1.equals(foo2) );

toStringを定義したので、次のことができます。

alert(foo1); // Alerts the value of foo1 instead of "[Object object]"
alert("foo1: " + foo1); // Alerts "foo1: 1". Useful when debugging. 

javascriptを使用してこれが可能になるとは思わない。独自の関数を作成する必要があります。 isEqual()

JavaScriptは、この点でJavaの名前に似ています。演算子のオーバーロードはありません。代わりに equals()などのカスタムメソッドを使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top