객체를 JavaScript에서 비교하는 방법을 어떻게 정의 할 수 있습니까?
-
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()
함수이지만 이것은 비교의 한쪽이 원시인 일 때만 유용합니다.
나는 루비와 정말 간단한 것을 놓쳤습니까?
def ==(obj); end
해결책
JavaScript에는 작업자 과부하가 없습니다. 보다 이 토론 당신의 질문을 다루고 있습니다.
다른 팁
깨끗한 방법이 아닙니다 ...
Foo = function (value){
this.value = value;
};
자신의 객체의 Tostring 함수를 무시하십시오.
Foo.prototype.toString = function( ){ return this.value.toString(); }
두 가지 테스트 개체 작성 :
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
객체의 값이 숫자 만 있으면 unery + 연산자를 사용하여 객체를 숫자로 변환 할 수 있습니다.
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 : Operator Overloading이 아닙니다. 와 같은 사용자 정의 메소드를 사용하십시오 equals()
대신에.