느릿늘있

[JS] 참조 객체 비교 에러 : This condition will always return 'false' since JavaScript compares objects by reference, not value. 본문

삽질로그

[JS] 참조 객체 비교 에러 : This condition will always return 'false' since JavaScript compares objects by reference, not value.

JHKim93 2023. 4. 2. 17:57

1. 현상

  socket chatting 프로젝트를 만들던 중 data protocol을 체크하는 단계에서 JS의 Object의 keys메서드를 활용하여 프로토콜 체크를 진행하려 하였다.

if (Object.keys(data) === [key1, key2, ...]) {}

  

" This condition will always return 'false' since JavaScript compares objects by reference, not value. "

" 이 조건식은 항상 'false'를 반환한다. JS가 값이 아닌 참조 객체를 비교하기 때문이다. "

 

2. 원인

  array1 = [1, 2, 3] / array2 = [1, 2, 3]이라고 하더라도 참조하는 주소 값이 다르기 때문에 이 둘의 일치 여부를 묻는다면 (객체 내부의 값과 상관 없이) 답은 항상 false를 반환한다는 뜻이다. 

 

3. 해결

  간단한 해결방법으로 배열 자체를 문자열로 만든 다음 비교시키면 된다. 명시적이기도 해서 나는 이렇게 해결했다.

if (Object.keys(data).toString === ['key1', 'key2'].toString) {}

** 더 많은 해결 방법 : https://codechacha.com/ko/javascript-get-key-value-of-object/