자바스크립트 / if문 안에 조건 ?
조회수 1399회
if (!selectedMarker || selectedMarker !== marker) {
// 클릭된 마커 객체가 null이 아니면
// 클릭된 마커의 이미지를 기본 이미지로 변경하고
!!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()
// 현재 클릭된 마커의 이미지는 클릭 이미지로 변경합니다
marker.setImage(purpleMarker);
infowindow.open(map, marker);
}
if문 안에 " !!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()"가 조건문이 없는데 뭔가 조건문처럼 동작하는 것 같아서 궁금합니다
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
자바스크립트의 if 조건부의 코드는 모두 불리언 타입으로 변환됩니다.질문하신 코드의 경우if (!selectedMarker || selectedMarker !== marker)연산자 우선순위에 따라 다음처럼 작동합니다좌변의 selectedMarker를 불리언으로 변환하고 반전합니다. 결과는 true 혹은 false입니다.우변의 selectedMarker가 marker와 엄밀히 불일치하는지 판단합니다. 결과는 true 혹은 false입니다.1과 2에서 평가된 불리언값 둘을 OR 연산합니다. 결과는 true 혹은 false입니다.selectedMarker 변수에 뭐가 들어있는지 몰라서 제 맘대로 예를 들어보면요:var selectedMarker = 'wassup';if (selectedMarker)위 코드는 실제로var selectedMarker = 'wassup';if (true)이렇게 됩니다. (string 타입이며 nullstring이나 공백이 아닌경우 true로 변환)
!!selectedMarker && selectedMarker.setImage(redMarker) && infowindow.close()
위 코드는 다음처럼 작동합니다.
selectedMarker
를 불리언으로 변환하고 두 번 반전합니다. 바로 다음에 오는 연산자가 AND 연산자이므로selectedMarker
가 true로 변환되면&&
우변을 평가합니다.(2번으로) 만약 false면&&
우변을 평가하지 않습니다. (종료)selectedMarker.setImage(redMarker)
메서드를 호출하고 메서드가 반환한 값을 불리언으로 변환합니다. 여기도 바로 다음에 오는 연산자가 AND 연산자이므로 메서드 반환값이 true로 변환되면&&
우변을 평가합니다. (3번으로) 만약 false면&&
우변을 평가하지 않습니다. (종료)infowindow.close()
메서드를 호출합니다.
- 제가 질문 자체를 이상하게 한 것 같네요 ㅠ 죄송합니다 알 수 없는 사용자 2018.8.3 14:27
- 제가 난독증이 있었네요. ㄷㄷ 편집요청빌런 2018.8.3 14:29
댓글 입력