오랜만에 글을 쓰네요.
일을 시작하니 글쓸 시간이 많이 없어서 오랜만에 들어왔는데, 다른 분들은 다들 열심히 글도 작성하시고 열심히 하시는것 같아서 자극받고 글하나 작성할게요.
위 제목으로 들어간 내용은, 배열을 비교문을 이용해 비교하려니 나왔던 오류이다.
이후 찾아보니,
'배열은 객체의 일종이며, 참조로 저장되므로 배열을 참조 비교하는 것은 요소를 비교하는것과 다르다.'
즉, === 나 ==를 사용하여 배열을 비교하면 배열의 내용이 동일하더라도 항상 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('달라용');
}
요약: 배열이나 객체는 비교문 (===, ==) 으로 비교가 안되니 요소 하나하나 확인
'JavaScript' 카테고리의 다른 글
| 이벤트 흐름 제어 (버블링과 캡처링) (1) | 2024.01.17 |
|---|---|
| 웹에서 안드로이드 운영체제 뒤로가기 버튼 제어 (1) | 2023.09.13 |
| forEach에서 continue 기능 사용하는 방법 (0) | 2023.05.31 |
| 자주 쓰이는 배열 APIs (0) | 2023.05.12 |
| async-await (0) | 2023.05.11 |
댓글