js는 == operator로 비교를 하면 형변환을 했을 때 동일하면 true를 반환합니다

triple equals(===) operator는 형변환을 하지 않고 비교합니다

'' == false   // true
'' === false  // false

이정도는 다 알고 계실 겁니다.

근데 문제는 ===가 primitive type에서만 유효하다는건데, object를 비교하는 것은 좀 머리아픕니다. 안에 내용물을 다 까봐서 비교하는 deep comparison이 아니기 때문입니다.

const 김실장 = {"phone": "010-0000-0000"}
const 박실장 = {"phone": "010-0000-0000"}
const 김실장_분신 = 김실장

김실장 === 박실장      // false
김실장_분신 === 김실장  // true

object의 경우 레퍼런스가 같으면 true, 아니면 false입니다.

 

lodash baseIsEqualDeep.js

직접 구현하려면 이런식으로 짜야됩니다.. 오마이갓..

 

var object = { 'a': 1 };
var other = { 'a': 1 };
 
_.isEqual(object, other);
// => true
 
object === other;
// => false

답은 그냥 lodash의 isEqual을 쓰는겁니다.

미래의 ES에는 뭔가 더 깔끔하고 라이브러리 없이 쓸 수 있는 방법이 있을수도..?

반응형