Object Equality in JavaScript
Equality는 대부분 처음의 하나로 JavaScript의 혼란스러운 측면이 있다.
Equality는 Javascript에서 가장 처음으로 혼란스러운 측면 중 하나이다.
==비해 ===은 강력한 타입 명령이다. 모두 주제를 복잡하게 제공한다.
오늘날 우리는 다른 면을 살펴 볼것이다. 어떻게 객체의 비교를 하는가
만약 두개의 객체가 같은 속성과 그들의 속성이 같은 값이면, 그들은 확실히 같은 수도 있을 것이다. 다은 경우를 보자
var jangoFett = { occupation: "Bounty Hunter", genetics: "superb" }; var bobaFett = { occupation: "Bounty Hunter", genetics: "superb" }; // Outputs: false console.log(bobaFett === jangoFett);
bobaFett와 jangoFett는 속성들은 같지만 객체 자신들은 확실 같지 않다. 아마도 그것이 ===를 사용해서 일까?
다음을 보자
// Outputs: false console.log(bobaFett == jangoFett);
이유는 내부 Javascript가 testing equility의 접근을 두개를 다르게 보기 때문입니다. stirngs와 numbers와 같은 기초적인 것은 그들의 값으로 비교를 하지만 반면에 배열,date, plain objects는 그들의 참조를 비교합니다. 참조의 비교는 기복적으로 객체 같은 메모리의 위치에 참조를 제공한다면 보는 거을 체크 합니다. 다은에 예제입니다.
var jangoFett = { occupation: "Bounty Hunter", genetics: "superb" }; var bobaFett = { occupation: "Bounty Hunter", genetics: "superb" }; var callMeJango = jangoFett; // Outputs: false console.log(bobaFett === jangoFett); // Outputs: true console.log(callMeJango === jangoFett);
한편, jangoFett와 bobaFett는 같은 속성들과 함께 두개애의 객체는 참조한다. 그러나 그들은 각기 다른 인스턴스이다. 한편 jangoFett와 callMeJango는 둘다같은 인스턴스를 참조한다.
이 때문에, 흥미로운 비교 종류에 대한 새로운 아이디어가 필요하다. 당신은 두개가 같은 인스턴스에 존재하는지 체크를 원하나요? 그때는 JavaScript의 내부 비고문 연산자를 사용할 수 있습니다. 또한 당신이 두개의 객체 같은 값인지를 체크를 원하나요? 만약 그렇다면 그때는 더 많은 일이 필요할 것입니다.
여기는 “값이 같은” 객체의 체크를 가장 기본적으로 접근합니다.
function isEquivalent(a, b) { // Create arrays of property names var aProps = Object.getOwnPropertyNames(a); var bProps = Object.getOwnPropertyNames(b); // If number of properties is different, // objects are not equivalent if (aProps.length != bProps.length) { return false; } for (var i = 0; i < aProps.length; i++) { var propName = aProps[i]; // If values of same property are not equal, // objects are not equivalent if (a[propName] !== b[propName]) { return false; } } // If we made it this far, objects // are considered equivalent return true; } // Outputs: true console.log(isEquivalent(bobaFett, jangoFett));
본다면, 같은 값은 객체의 “값이 같음”을 객체의 모든 속성을 반복하며 그것들을 비교합니다. 그리고 단순히 실행을 위한 일은 우리의 예제를 위한 일입니다. 거기에는 많은 경우가 조절할 수 없습니다. 예를 들어
속성값중에 객체 자신이라면
속성값이 NaN이라면
a 속성은 undefined이고 b는 속성이 없을때
robust는 체크 객체들의 메소드는 “값 같음” 그것은 여러가지 엣지 케이스를 테스트한 라이브러리에서 답변이 온다. 두개 Underscore와 Lo-Dash는 _.isEqual의 이름으로 실행 합니다. 깊은 객체의 비교는 잘 된거 당신은 아래와 같은 소스 코들를 사용할 수 있다.
// Outputs: true console.log(_.isEqual(bobaFett, jangoFett));
나는 Javascript의 drip을 희망하고 객체를 어떻게 비교하는지 알아 보았다.











