Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- javascript
- 알고리즘
- 항해플러스
- rust
- 자바스크립트
- 항해
- 분기 회고
- 항해 플러스
- typescript
- webGPU
- 테스트 코드
- 성능최적화
- React
- React Query
- 개발자
- 개발공부
- 보안
- 백준
- 프론트엔드
- GPU
- 회고
- 리뷰
- 항해99
- naver
- wil
- FE
- 항해 플러스 프론트엔드
- 성장일지
- frontend
- 개발 공부
Archives
- Today
- Total
느릿늘있
[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:571. 현상
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/
'삽질로그' 카테고리의 다른 글
[JS] 배열 탐색 : forEach, filter, find (0) | 2023.11.29 |
---|---|
[개발 환경] WSL2 UNC 경로 에러 (0) | 2023.07.25 |
[SQL] 쿼리문 변경을 통한 성능 향상 경험 (0) | 2023.06.13 |
[nextJS] Google Map API 성능 최적화 경험 기록 (0) | 2023.05.07 |
[react query] 응답 status는 success인데 data가 undefined인 경우 (0) | 2023.03.28 |