본문 바로가기
JavaScript

JavaScript는 값이 아닌 참조로 개체를 비교하므로 이 조건은 항상 'false'을(를) 반환합니다.

by 갈잃자 2023. 8. 29.

오랜만에 글을 쓰네요.

일을 시작하니 글쓸 시간이 많이 없어서 오랜만에 들어왔는데, 다른 분들은 다들 열심히 글도 작성하시고 열심히 하시는것 같아서 자극받고 글하나 작성할게요.

 

위 제목으로 들어간 내용은, 배열을 비교문을 이용해 비교하려니 나왔던 오류이다.

 

이후 찾아보니,

 

'배열은 객체의 일종이며, 참조로 저장되므로 배열을 참조 비교하는 것은 요소를 비교하는것과 다르다.'

 

즉, === 나 ==를 사용하여 배열을 비교하면 배열의 내용이 동일하더라도 항상 false를 반환하게 된다.

 

예시 코드와 함게 보자면

// 무조건 false가 나는 구문
// ts에선 다행히도, 값을 보여주지 않고 false만 일어나는 오류라고 에러를 내준다.
// js 라면 계속 달라용 만 출력될것임

companys = ['KB라이프생명', 'KB생명', '푸르덴셜생명'];

if (companys === ['KB라이프생명', 'KB생명', '푸르덴셜생명']) {
	console.log('같아용');
} else {
	console.log('달라용');
}

 

그렇다면 이걸 어떻게 해결하냐.

뭐 사람마다 다르겠지만, 요소 하나하나 반복문을 이용해서 비교해도 되고, 나같이 every 함수를 이용해도 된다.

// 요소가 전부 같다면, 같아용 하나라도 틀리면 달라용 이 나오는 코드
//every() 함수 사용

companys = ['KB라이프생명', 'KB생명', '푸르덴셜생명'];
if (companys.every(company => ['KB라이프생명', 'KB생명', '푸르덴셜생명'].includes(company))) {
	console.log('같아용');
} else {
	console.log('달라용');
}


요약: 배열이나 객체는 비교문 (===, ==) 으로 비교가 안되니 요소 하나하나 확인

댓글